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 是最直接可靠的方式
自动生成 tag 并非 Go 内置能力,需借助 Git 和脚本配合。推荐在本地或 CI 中执行:
- 确认当前代码已测试通过、
go mod tidy无变更、go build成功 - 更新
go.mod中的模块路径(如有必要),但版本号不在此文件中体现 - 运行命令打 tag:
git tag v1.2.0 - 推送 tag 到远程:
git push origin v1.2.0或git push origin --tags
可选:用脚本自动推导并创建 tag
若希望减少人工判断,可用简单 Bash 脚本辅助(例如基于上次 tag 自增 patch):
- 获取最新 tag:
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 前缀和推送步骤,导致下游无法感知新版本。










