Go语言的发展遵循了一个设计驱动的过程,任何对语言、库或工具的重大改变或增加都必须经过提议、讨论和文档化的步骤,才能被实现。
Go语言的版本号由三部分组成:主版本号、次版本号和修订号。例如,Go 1.20.4 表示第一代Go语言的第20个次版本的第4次修订。Go语言的版本号遵循了一个简单而清晰的原则:只有在保证向后兼容性的情况下,才会增加次版本号或修订号;如果需要引入不兼容的变化,就需要增加主版本号。这样可以保证Go语言的稳定性和一致性,也方便开发者和用户管理和使用不同版本的Go语言。
然而,Go语言的版本命名规则也存在一些问题和不一致。在主版本或次版本发布时,第三位数字(修订号)被省略了。例如,Go 1.20 表示第一代Go语言的第20个次版本的第0次修订。这样做可能会导致一些混淆和误解,比如在go.mod
文件中使用三位数字的版本号(如go 1.20.0
),而在其他地方使用两位数字的版本号(如go 1.20
);而且 Go1.20 这样的版本会让一些开发者感到困惑,不清楚他们正在运行或应该运行哪个版本。一些早期的评论也表达了类似的观点,希望第一个补丁版本能用 go1.20.0 而不是 go1.20 来命名。
为了解决这些问题,有人提出了一个关于Go语言的版本命名规则的提议(https://github.com/golang/go/issues/57631)。提议的内容是,在主/次版本发布时,在第三位数字使用零,而不是省略它。例如,Go 1.21.0 表示第一代Go语言的第21个次版本的第0次修订。这样可以避免一些混淆和不一致,也可以保持与go.mod
文件中使用的三位数字版本号相同。
这个提议已经被接受,并计划在 Go 1.21 中实施。这个提议对于 Go 语言本身并没有引入任何功能或行为上的变化,只是对于版本命名规则做了一个小而合理的改进。这个改进可以让 Go 语言的版本号更加清晰和一致,也可以给开发者和用户带来一些便利。当然,这个改变也会带来一些成本,比如需要更新一些文档、代码和工具。但是,相比于它带来的好处,这些成本应该是可以接受和承担的。
总之,这个提议是一个关于 Go 语言的版本命名规则的改进建议,它旨在解决当前存在的一些问题和不一致,并提高 Go 语言的可用性和易用性。这个提议已经得到了社区的支持和认可,并将在未来实施。
推荐阅读