Go模块发布必须使用带v前缀的语义化版本tag(如v1.2.0),手动或脚本打tag后推送至远程,再通过go list和go get验证可引用性。
Go 模块的 tag 必须符合 语义化版本(SemVer)格式,例如 v1.2.0、v0.5.3。不能是 1.2.0(缺 v 前缀)或 release-1.2(非标准)。Go 工具链(如 go list -m -versions、go get)只识别带 v 前缀的合法 SemVer tag。
自动生成 tag 并非 Go 内置能力,需借助 Git 和脚本配合。推荐在本地或 CI 中执行:
go mod tidy 无变更、go build 成功go.mod 中的模块路径(如有必要),但版本号不在此文件中体现git tag v1.2.0
git push origin v1.2.0 或 git push origin --tags
若希望减少人工判断,可用简单 Bash 脚本辅助(例如基于上次 tag 自增 patch):
git describe --tags --abbrev=0 2>/dev/null || echo "v0.1.0"
awk 或 sed),生成新 tag 如 v0.1.1
^v[0-9]+\.[0-9]+\.[0-9]+$)git tag 和 git push
注意:自动递增仅适合 patch 级发布;主/次版本升级仍需人工确认兼容性。
tag 推送后,等几秒至几分钟(GitHub/GitLab 同步延迟),即可验证:
go list -m -versions your/module/path 查看是否列出新 tag
go get your/module/path@v1.2.0 确认能拉取go.mod 中是否写入了正确版本,且 go.sum 更新无误基本上就这些。不复杂但容易忽略 v 前缀和推送步骤,导致下游无法感知新版本。