本文主要分享【golang搭建后台】,技术文章【golang 多项目工作区搭建】为【一二三起】投稿,如果你遇到golang相关问题,本文相关知识或能到你。

golang搭建后台

1 golang 多项目工作区搭建 文章目录 1 golang 多项目工作区搭建1.1 多项目工作区建立1.2 go work使用
初次接出golang,我们参照上篇文章,很快就可以使用vscode搭建好继承开发环境,并创建了自己的项目

vscode配置go开发环境

在同一个项目中,我们很容易的采用mod方式进行依赖包及版本管理,但是现实红中,可能一个系统分为多个子项目,每个项目都可能有人单独开发,最后有人多项目调试,如果是多项目调试,每个项目都有自己的mod,我们可以通过把项目包上传后,再拉取的方式来引用,但是无法直接本地提示,如果要做到本地调试,且不改变原来的依赖路径,我们怎么做呢?

有两种方式,一种是通过mod replace来重定向到本地路径,go1.18版本提供了一种更方便的方式 work方式来引入本地项目,有关mod方式如何管理,网上有很多介绍,本人不喜欢这种方式,因为后续如果发布,还需要更改依赖,work方式可以很优雅的实现。

1.1 多项目工作区建立

由于近期要用golang实现流媒体,对Monibuca(m7s)源码进行了研究,具体如果想了解流媒体源码可参照m7s源码:
地址

首先创建一个目录,这里命名为m7sv4使用vscode打开此文件夹(file->openfolder),然后保存工作区(file->save workspace as)到m7sv4目录然后创建main.go,输入:
package main

import (
 "context"
 "flag"

 "m7s.live/engine/v4"
 "m7s.live/engine/v4/util"
 _ "m7s.live/plugin/rtmp/v4"
 _ "m7s.live/plugin/rtsp/v4"
)

func main() {
 conf := flag.String("c", "config.yaml", "config file")
 flag.Parse()
 ctx, cancel := context.WithCancel(context.Background())
 go util.WaitTerm(cancel)
 engine.Run(ctx, *conf)
}
初始化mod并下载依赖包
go mod init m7sv4 #模块初始化
go mod tidy       # 更新依赖项
go mod download   # 下载依赖包
f5运行或者直接再terminal中go run main.go 可直接运行流媒体

以上方式依赖包会下载到go path路径下的pkg/mod中,我这里有这样的场景,我要对源码进行调试和修改,我把源码下载到本地,并放到m7sv4文件夹中,如下:

工作目录创建

这里我们无论对当前目录下的源码如何修改,运行main时,都不会生效,因为main依赖包在gopath下,为了使得当前目录下项目源码修改后能够及时生效和断点调试,我们可以利用mod的replace来实现,也可以修改所有import导入方式改成相对路径,如下方式:

 "m7stest/engine"
 "m7stest/engine/util"

源码中所有m7s.live/engine/v4,都要改成m7stest/engine,并去除所有项目中的mod,只保留主项目的mod,也就是把多项目转化为多模块方式,这种方式很不友好。下面介绍通过work的方式管理。

1.2 go work使用

把源码下载下来之后,放到m7stest目录下,工作区间目录结构如下:

m7sv4->engine
     ->plugin->rtmp
             ->rtsp
     ->main.go
     ->go.mod
     ->go.work       

work引入项目步骤如下:

初始化work:
go work init ./
引入本地项目:
go work use ./engine
go work use ./plugin/rtmp
go work use ./plugin/rtsp

work引入项目后内容:

go 1.18

use (
 ./
 ./engine
 ./plugin/rtmp
 ./plugin/rtsp
)

使用go work 不需要对各个项目的go.mod 做任何操作就能直接使用项目代码修改后最新的代码,对本地调试非常方便

暑期编程PK赛

得CSDN机械键盘等精美礼品!

本文《golang 多项目工作区搭建》版权归一二三起所有,引用golang 多项目工作区搭建需遵循CC 4.0 BY-SA版权协议。