基础规则
Go 模块严格遵循语义化版本 ,版本号格式为vX.Y.Z
(如v1.9.1
),每个部分的含义如下:
- X(主版本号) :不兼容的 API 变更(如
v1→v2
,表示有 breaking change,使用时需谨慎); - Y(次版本号) :向后兼容的功能新增(如
v1.8→v1.9
,新增功能但不影响旧代码); - Z(修订号) :向后兼容的 bug 修复(如
v1.9.0→v1.9.1
,仅修复 bug)。
如图

特殊版本标识:
- 预发布版本:在版本号后加
-beta
/-rc
等(如v1.9.0-beta.1
,表示测试版,稳定性未保障); - 伪版本:当依赖没有正式版本号(仅 Git 提交记录)时,Go 会生成伪版本(如
v0.0.0-20231001123456-abcdef123456
,格式:v0.0.0-时间戳-commit哈希
)。

- 不兼容的版本:版本号后自动添加
+incompatible
标记,表明这是一个 "不兼容的版本"
按照 Go 模块的强制要求:当一个模块的主版本号升级到v2
及以上(如v2
、v3
)时,必须在模块路径中添加版本后缀(如/v2
、/v3
),例如:
- v1 版本路径:
github.com/avast/retry-go
- v3 版本正确路径 应该是:
github.com/avast/retry-go/v3
但这个依赖的作者在发布v3.0.0
时,仍然使用了旧的路径(没有加/v3
),导致 Go 模块认为它 "不符合规范"。
如何发布自己的 Go 模块?
如果你开发的包想被其他人通过go get
引用,需按以下步骤发布:
- 确保模块路径是可访问的 Git 仓库地址 (如
github.com/your-username/your-package
); - 在 Git 仓库中打语义化版本标签 (如
v1.0.0
):****
perl
git tag v1.0.0
git push origin v1.0.0
- 其他人即可通过
go get 你的模块路径@版本号
引用(如go get github.com/your-username/your-package@v1.0.0
)。
(3)主版本号升级(如 v1→v2)需要注意什么?
当你的模块有不兼容的 API 变更(需升级主版本号到 v2),必须修改模块路径 (在路径后加/v2
),否则会导致依赖冲突:
- 示例:v1 版本路径为
github.com/your-username/your-package
,v2 版本需改为github.com/your-username/your-package/v2
; - 原因:Go 模块通过 "路径 + 版本号" 唯一标识依赖,v2 路径的变更会让 Go 认为是 "新模块",避免与 v1 版本冲突。