一个关于go module的有趣话题
版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | https://vearne.cc
1. 引言
假如你正在使用go mod管理某个项目的代码库依赖
- case1: 某个项目的tag是超过v1版本的,你该怎么定义module
- case2: 某个项目要同时进行2个版本的开发,v2和v3 你该怎么定义module
2. 问题
为了验证效果,萌叔创建了项目 vearne/mod-multi-version
这个代码库只有一个文件
package mmv
import "fmt"
const Versoin = "v1.0.0"
func PrintVersion(){
fmt.Println("version:", Versoin)
}
其它项目使用vearne/mod-multi-version
package main
import (
"github.com/vearne/mod-multi-version"
)
func main() {
mmv.PrintVersion()
}
代码库的tag列表中包含以下tag
v1.0.0
v1.0.2
v2.0.1-Alpha
v2.0.5
v2.0.6
v3.0.0
v3.0.1
但如果你试图拉取v2.0.1-Alpha
╰─$ go get github.com/vearne/mod-multi-version@v2.0.1-Alpha
go get: github.com/vearne/mod-multi-version@v2.0.1-Alpha: invalid version: module contains a go.mod file, so major version must be compatible: should be v0 or v1, not v2
错误提示主版本号只能是v0或者v1
3. 需要导入v2库怎么办?
module github.com/vearne/mod-multi-version/v2
go 1.16
module github.com/vearne/mod-multi-version/v3
go 1.16
注意module名称已经发生了变化
其它项目使用vearne/mod-multi-version
时,也要注意module名称的变化
示例
package main
import (
"github.com/vearne/mod-multi-version/v2"
)
func main() {
mmv.PrintVersion()
}
总结
现在我们已经很清楚了,只需要修改go.mod
中module的定义,就可以方便的引入主版本大于v1
的情况了。对于case2
的情况,可以拉2个不同的分支branch_v2
和branch_v3
来对应v2
、v3
的开发。最后,不要忘了修改go.mod
。