Go module 如何发布 v2 及以上版本?

用上 go mod 之后,依赖包都是通过版本打 tag 的形式确定版本号。比如 github.com/mnhkahn/gogogo v1.0.9。每次都改动都是在累加低位的版本号,一直这么用也挺安逸的。突然有一天,我的一个底层包需要大改,导致和之前的版本彻底不兼容,这种情况下如何设置版本号,如何能让调用方成功接入?

Go module 版本号

先讲一下 Go 在用的版本号协议semver (Semantic Versioning)。它定义的版本号格式是:

vMAJOR.MINOR.PATCH

  • MAJOR 主版本号,如果有大的版本更新,导致 API 和之前版本不兼容。我们遇到的就是这个问题。
  • MINOR 次版本号,当你做了向下兼容的新 feature。
  • PATCH 修订版本号,当你做了向下兼容的修复 bug fix。
  • v 所有版本号都是 v 开头。

比如我们用的 Go 语言,目前是 1.12.0。它还是 Go 1,每次升级都保证是兼容的,12的版本号是新 feature,而最末尾的版本号是修复。说明当前的版本上了之后还没有修复过问题。

我这次也是搞了一个不兼容的更新,所以需要升级到 v2.0.0。 Continue reading "Go module 如何发布 v2 及以上版本?"