拉取非公共module
通过 Go 命令拉取项目依赖的公共 Go Module,只需要在每个开发机上设置环境变量 GOPROXY,配置一个高效且可靠的公共 GOPROXY 服务,如 set GOPROXY=https://goproxy.cn,direct
。但是如果同时需要拉取私有的包怎么办呢?如企业自己开发的module依赖。这时我们需要配置set GOPRIVATE=*gitee.com
,表示 gitee.com
的包不使用代理而是直接拉取。通过go env
命令可以看出:
set GONOPROXY=*gitee.com
set GONOSUMDB=*gitee.com
set GOPRIVATE=*gitee.com
开发私有module
- 如我们开发一个打印版本的方法,封装在了
gitee.com/happywzy/go-module-test
包中。
package pkg
func Version() string {
return "version 1"
}
我们模拟提交了很多个版本,并在不同的commit打上了一些tag,提交到了远程仓库。
# 查看版本号
> git ls-remote -q origin
9da810c37c774a3775a518d16cfe032a39f862ea HEAD
9da810c37c774a3775a518d16cfe032a39f862ea refs/heads/master
9da810c37c774a3775a518d16cfe032a39f862ea refs/tags/v1.0.0
f4c3585328e0a686ad35537e390473917c4b202b refs/tags/v1.0.0-test
1e40db9baf18cbb8ed5784858bc9418c738792a7 refs/tags/v2
- 我们需要在另一个Module中使用
Version()
方法
go.mod配置如下:
module gitee.com/happywzy/go-module
go 1.19
require (
gitee.com/happywzy/go-module-test v1.0.0-test
)
- 版本号可以配置成commitId,执行
go mod tidy
后,会根据commitId
自动生成伪版本号,如gitee.com/happywzy/go-module-test v0.0.0-20240524023550-1e40db9baf18
,这个版本号不要手敲,防止出错。 - 版本号可以配置成tag,如
v1.0.0
、v1.0.0-test
,但是配置成v2
这种好像无法识别。 - 可以通过
go get
命令去安装module,如go get gitee.com/happywzy/go-module-test@master
,@
后面可以是分支名、tag名、commit ID,非常方便。
如何使用本地的Module
前面介绍的方式需要Module推送到远程仓库后才能使用,这在开发阶段非常不适用,如何直接使用本地的Module呢?有两种方式。
- 使用 go.mod 中 replace
replace (
gitee.com/happywzy/go-module-test v1.0.0-test => ../../happywzy/go-module-test
)
表示gitee.com/happywzy/go-module-test v1.0.0-test
这个包直接使用本地路径下的代码。这种方式需要注意在提交代码前需要将replace
删除,防止出错。
- 使用 go.work
go.work
在1.18
版本之后才有。
go 1.19
use (
./happywzy/go-module-test
./happywzy/go-module
)
go.work
文件需要位于两个模块的上层目录,通过go work init
初始化生成,使用go work use gitee.com/happywzy/go-module-test
添加。
go.work
这个文件无需提交到git,仅用于本地开发即可。