这是我参与「第五届青训营」伴学笔记创作活动的第 3 天
本篇内容
- go modul和语义化版本号
Go module
go module是在1.11版本引进的依赖管理机制,在1.16版本开始成为go默认的包管理机制。从此之后GO PATH和go vendor以及go dep等依赖管理工具逐渐退出历史舞台,go语言的依赖管理工具统一为go module。go module管理的基本单位是package,module就是package的集合。一般而言,一个项目即为一个module,一个module一般只有一个go.mod文件。,为充分发挥go module的特性和保证规范性(go语言是一个强规范的语言,从go fmt开始就限制了严格的代码风格),go语言提出了语义化版本号和最小版本选择两个概念。
语义化版本号
规范的go依赖仓库以a.b.c的格式标示package的版本号。具体而言:
a代表主要更新版本,即前后版本的API不兼容,混用可能会发生严重问题;b代表次要更新版本,每个次要更新版本添加了若干特性或功能(features) ;C代表补丁号或者修订号,每个补丁(patch)应该仅包含bug修复等工作。
其中b和c都应该是向下兼容的,没有破坏性变更。即只要主版本号不变,就不会产生不兼容API的问题。在import路径中,需要明确指明大版本号,例如projname/v3/sub/pkg.
在module的应用中,主版本号改动即不兼容之前的版本,而次版本号以下的改动视作向前兼容,因此可以合并版本。这也是最小版本选择算法的基础。
语义化版本规范了开发者的release行为,使得依赖的版本迭代进一步统一,同时增强了版本号的可读性。
下一篇内容
- 最小版本选择算法