🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁
🦄 博客首页——🐅🐾猫头虎的博客🎐
🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐
🌊 《100天精通Golang(基础入门篇)》 🐅 学会Golang语言,畅玩云原生,走遍大小厂~💐
🐅🐾猫头虎建议Go程序员必备技术栈一览表📖:
☁️🐳
Go语言开发者必备技术栈☸️
:
🐹 GoLang | 🌿 Git | 🐳 Docker | ☸️ Kubernetes | 🔧 CI/CD | ✅ Testing | 💾 SQL/NoSQL | 📡 gRPC | ☁️ Cloud | 📊 Prometheus | 📚 ELK Stack
🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🐅🐾🍁🐥
文章目录
- 🐅🐾猫头虎建议Go程序员必备技术栈一览表📖:
- 2019年11月7日 Go生态洞察:Go Modules v2及更高版本 🚀
- 摘要
- 引言
- 正文
- Go Modules的重大版本和模块路径 🛣️
- 发布v2及更高版本 🌟
- 维护多个主要版本 🛠️
- 总结
- 下一篇预告
- 原创声明
-
原创作者: 猫头虎
-
作者wx: Libin9iOak
-
作者公众号: 猫头虎技术团队
2019年11月7日 Go生态洞察:Go Modules v2及更高版本 🚀
摘要
大家好,我是猫头虎博主!今天,我们将深入探讨Go的一个关键话题:Go Modules的v2版本及其后续版本。如果你对Go生态的未来方向感到好奇,那就跟着我一起探索吧!搜索关键词包括Go Modules、版本控制、模块兼容性等。
引言
本文是系列博客的第四部分,旨在探讨Go Modules在版本2及以后的发展。对于一个成功的项目而言,随着需求的增加,有时过去的特性和设计决策可能不再适用。这就需要开发者通过删除废弃的函数、重命名类型或拆分复杂的包来整合他们学到的经验。这些变化需要下游用户投入精力迁移他们的代码到新的API,因此在做出这些改变前,应该仔细权衡利弊。
正文
Go Modules的重大版本和模块路径 🛣️
Go Modules确立了Go中一个重要原则——导入兼容规则:
如果一个旧包和一个新包有相同的导入路径, 那么新包必须与旧包向后兼容。
根据定义,一个包的新主要版本与前一个版本不兼容。这意味着新的主要版本的模块必须有一个与前一个版本不同的模块路径。从v2
开始,主要版本号必须出现在模块路径的末尾(在go.mod
文件中的module
语句中声明)。例如,github.com/googleapis/gax-go
的作者在开发v2
时,使用了新的模块路径github.com/googleapis/gax-go/v2
。想要使用v2
的用户必须更改他们的包导入和模块需求为github.com/googleapis/gax-go/v2
。
发布v2及更高版本 🌟
以下是使用github.com/googleapis/gax-go
作为示例的发布过程:
$ pwd
/tmp/gax-go
$ ls
...
$ cat go.mod
module github.com/googleapis/gax-go
...
为了开始github.com/googleapis/gax-go
的v2
开发,我们创建一个新的v2/
目录并将包复制进去:
$ mkdir v2
$ cp -v *.go v2
...
接下来,通过复制当前的go.mod
文件并添加/v2
后缀来创建v2的go.mod
文件:
$ cp go.mod v2/go.mod
$ go mod edit -module github.com/googleapis/gax-go/v2 v2/go.mod
请注意,v2
版本被视为与v0 / v1
版本不同的单独模块:两者可以在同一构建中共存。因此,如果你的v2+
模块有多个包,你应该更新它们以使用新的/v2
导入路径。
维护多个主要版本 🛠️
一旦我们对v2
API感到满意,并确信不需要其他重大更改,我们可以标记v2.0.0
:
$ git tag v2.0.0
$ git push origin v2.0.0
此时,我们需要维护两个主要版本。向后兼容的更改和bug修复将导致新的次要和补丁版本的发布(例如,v1.1.0
、v2.0.1
等)。
总结
重大版本的变化导致了开发和维护的开销,并且要求下游用户投资以迁移到新版本。对于大型项目,这些开销往往更大。重大版本的变化只应在识别到一个有说服力的理由后进行。一旦确定了一个突破性变化的有力理由,我们建议在master分支上开发多个主要版本,因为它与更广泛的现有工具兼容。
v1+
模块的重大更改应始终在新的vN+1
模块中进行。新模块的发布意味着维护者和需要迁移到新包的用户的额外工作。因此,维护者在进行稳定版本发布之前,应该验证他们的API,并仔细考虑在v1
之后是否真的需要重大更改。
本文被猫头虎的Go生态洞察专栏收录,详情点击这里。
关键知识点 | 描述 |
---|---|
Go Modules | Go的模块管理系统 |
版本控制 | 管理不同版本的策略和实践 |
导入兼容规则 | Go中确保向后兼容性的原则 |
v2及更高版本 | 管理和发布Go Modules的新版本 |
维护多版本 | 同时维护多个版本的策略 |
下一篇预告
下次,我们将探讨Go的另一个里程碑:《Go Turns 10》。届时,我们将回顾Go语言的十年发展历程,探讨其影响力和未来趋势。不要错过!🎉
原创声明
======= ·
-
原创作者: 猫头虎
-
作者wx: Libin9iOak
-
作者公众号: 猫头虎技术团队
学习 | 复习 | Go生态 |
---|---|---|
✔ | ✔ | ✔ |
本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。
作者保证信息真实可靠,但不对准确性和完整性承担责任。
未经许可,禁止商业用途。
如有疑问或建议,请联系作者。
感谢您的支持与尊重。
点击
下方名片
,加入IT技术核心学习团队。一起探索科技的未来,洞察Go生态,共同成长。