go module 包管理快速上手
go module 包管理快速上手
语义版本
module 使用的是v主要版本号.次要版本号.补丁版本号 来表示一个包的版本
如果需要进一步指定 beta 或者 alpha 版本的话可以在后面接上 - 然后用 . 来分割自定义标识内容,例如 v1.0.1-beta.2 来表示一个预发布版本
版本升级规定
不稳定发布
一般来说一个新开项的包的主版本号为 v0 开头,表示这是一个初始的不稳定的依赖版本,在这个主版本号下开发不保证 API 的稳定。新包的迭代方式
// 本地
$ go mod tidy
$ go test ./...
// 远程
$ git commit -m "write something"
$ git tag v0.1.0
$ git push origin v0.1.0验证发布的版本是否可以被其他人所使用
$ go list -m example.com/[email protected]稳定发布
一般这个时候 API 的设计已经趋于稳定,需要保证导出的函数和方法签名不被改变,导出的类型也必须存在,如果有新的改变,则修改次要版本号,如果只是小的 bug fix ,那么修改补丁版本号即可
大版本升级
如果需要对之前版本的 API 进行重新调整破坏原先兼容的 API ,那么就需要修改主版本号来发布,使用者必须要手动更改 import path 的方式来使用更新版本的包,例如 import "rsc.io/quote/v3" 来手工指定使用 v3 版本的包
多版本开发共存
在当前 go.mod 文件存在的项目根目录下创建 v2 文件夹,将 .go 文件拷入,最后使用 edit 将 v2 作为一个新的模块
如:
go mod edit -module github.com/googleapis/gax-go/v2 v2/go.mod进行一些破坏性的修改过后
就可以把引用这个包的程序的 import path 在本地进行批量修改,然后编译查看是否兼容
find . -type f \
-name '*.go' \
-exec sed -i -e 's,github.com/my/project,github.com/my/project/v2,g' {} \;如果想要进行预发布就需要打上对应的测试 tag,比如 v2.0.0-alpha1
测试完成后就可以打上正式的版本 tag 并进行发布即可