Go.mod版本号规则:语义化版本

基础规则

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及以上(如v2v3)时,必须在模块路径中添加版本后缀(如/v2/v3),例如:

  • v1 版本路径:github.com/avast/retry-go
  • v3 版本正确路径 应该是:github.com/avast/retry-go/v3

但这个依赖的作者在发布v3.0.0时,仍然使用了旧的路径(没有加/v3),导致 Go 模块认为它 "不符合规范"。

如何发布自己的 Go 模块?

如果你开发的包想被其他人通过go get引用,需按以下步骤发布:

  1. 确保模块路径是可访问的 Git 仓库地址 (如github.com/your-username/your-package);
  2. 在 Git 仓库中打语义化版本标签 (如v1.0.0):****
perl 复制代码
git tag v1.0.0
git push origin v1.0.0
  1. 其他人即可通过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 版本冲突。
相关推荐
维克兜率天7 小时前
【维克】ARMA模型:AR与MA的完美结合
后端·restful
是未才8 小时前
从输入 URL 到页面返回:DNS、路由、TLS 与 HTTP 完整链路
java·后端·计算机网络
上海安当技术9 小时前
半天接入:USBKey RESTful API + C 动态库,Web 和 C/S 两套集成路径实战
前端·后端·restful·集成·usbkey
DevUI团队9 小时前
从“即兴创作”到“规格先行”,华为云码道(CodeArts)代码智能体持续深耕企业级规范驱动开发能力
前端·人工智能·后端
weixin_4316004410 小时前
NestJS 入门(3):Guard 如何挡住未登录请求?
前端·后端·学习·nest.js
IT_陈寒11 小时前
JavaScript类型转换把我坑惨了,这破玩意真该早点搞明白
前端·人工智能·后端
用户9385156350711 小时前
手写一个 LLM Harness 框架:用工程化手段把大模型幻觉踩在脚下
javascript·人工智能·后端
wei_shuo12 小时前
KES 云原生部署与弹性扩展:容器化、Kubernetes编排与自动伸缩
后端
一木之林12 小时前
Python.五.(一)--1. 并发编程、异步IO与多进程
后端
feng尘12 小时前
# 彻底搞懂 ReentrantLock 与 tryLock:从秒杀实战到 AQS 独占模式源码剖析
后端