关于golang的mod一些使用技巧
关于本地库的引用
因为微服务存在多个公共库,而且都是私密库,所以导致go mod下载库时比较麻烦,容易被卡。其次还考虑到可能同时开发好几个微服务,重复获取git也不现实,所以弄成了公共库。这里遇到了一个问题,就是公共库如何被引用到go mod中。
- 在go.mod中的require设置好对应的库,以及版本。例如: gitee.com/abc/abc v1.0.0
- 之后外部设置一个replace替换路径,replace gitee.com/abc/abc => /本地公共库路径
go.mod设置如下
module gitee.com/微服务项目go 1.13
require (
gitee.com/abc/abc v1.0.0
...
)
replace gitee.com/abc/abc => /本地公共库路径
设置完成后,注意一定要使用go mod tidy整理,最后再使用go mod vendor自动完成下载。go mod会把这个公共库和本地代码做对比,克隆使用到的方法文件。
关于线上流水化设置
因为使用了多个私有库做引用,而且本地和远程自动流水设置上都有出入,所以线上在编译前一定要替换掉这个go.mod,这就需要在项目内写几个脚本和备用文件,用于替换。这里以这个项目为例说明。
1、流水线在克隆代码时,必须同时克隆公共库的git。以阿里的云效为例,输入源需除了拉取要编译的微服务外,还需要拉取公共库。
2、在项目内./scripts/dev下创建流水线专用的go.mod
module gitee.com/微服务项目go 1.13
require (
gitee.com/abc/abc v1.0.0
...
)
replace gitee.com/abc/abc => /流水线公共库git克隆路径
3、在流水化构建部分,编译前注意加上强制覆盖go.mod的方法。
# 镜像export GOPROXY=https://goproxy.cn
# 编译之前,迁移frame底层框架
mv -f ./script/dev/_go.mod ./go.mod
# 构建
go build -o ./builds/a1_linux64 gitee.com/abc/a1
# 将相关配置文件更换到builds目录
...
4、设置好其他流水线方案设计,运行即可。
以上是 关于golang的mod一些使用技巧 的全部内容, 来源链接: utcz.com/z/514030.html