我到处都读到包必须有 v0 或 v1 的标签。为什么标签不能是 v2020 或 v0 或 v1 以外的其他东西。我已经尝试过这个个人,但在使用 v2020 时出现以下错误。
Scotts-Mac-mini:seeding syacko$ go mod tidy
go: errors parsing go.mod:
/Users/syacko/workspace/sotesoft/src/utils/seeding/go.mod:10: require gitlab.com/soteapps/packages: version "v2020.2.0" invalid: module contains a go.mod file, so major version must be compatible: should be v0 or v1, not v2020
Scotts-Mac-mini:seeding syacko$
Run Code Online (Sandbox Code Playgroud)
这是一个约定,方便大家。Go 模块选择使用广泛接受的Semantic Versioning v2。
如果我创建了一个 go.mod 但没有将 semver 标签应用于我的存储库,会发生什么?
semver是模块系统的基础。为了给消费者提供最好的体验,我们鼓励模块作者使用 semver VCS 标签(例如,v0.1.0 或 v1.2.3-rc.1),但不严格要求 semver VCS 标签:
来自 Dave Cheney 的一篇有趣且相关的博文,早于 Go 模块:Gophers,请标记您的版本
我们想要什么?Go 包的版本管理!我们什么时候要?昨天!
[...] 当您开始在项目中使用该包时,我们希望我们选择的 Go 构建工具能够获取最新的稳定版本。[...]
但就目前而言,在 2016 年的今天,人类或工具无法查看Go 代码的任意git(或 mercurial,或 bzr 等)存储库并提出以下问题:
- 这个项目已经发布了哪些版本?
- 该软件的最新稳定版本是什么?
- 如果我有 1.2.3 版,是否有我应该应用的错误修复或安全更新?
这样做的原因是 Go 项目(Go 包的存储库)没有版本,至少不像我们在其他语言中的朋友使用这个词的方式。Go 项目没有版本,因为没有正式的发布过程。
[...] 我建议 Go 项目采用SemVer 2.0.0。这是一个健全的标准,很多人都很好理解,不仅仅是 Go 程序员,语义版本控制将让人们编写工具来在最小的发布过程之上构建依赖管理生态系统。