加餐|作为Go Module的作者,你应该知道的几件事
该思维导图由 AI 生成,仅供参考
仓库布局:是单 module 还是多 module
- 深入了解
- 翻译
- 解释
- 总结
Go Module的作者在规划、发布和维护时需要考虑仓库布局、版本发布和处理broken状态的module等问题。单一仓库管理一个module是最简单的方式,而单仓库多module模式需要更谨慎和深思熟虑。发布Go Module时,需要为repo打上tag并推送到代码服务器,注意在tag中加上各个module的子目录名。作者需要注意避免发布处于broken状态的module版本,以及作废特定版本的Go Module。修复broken版本并重新发布可能无效,因为Goproxy服务器会缓存已发布的broken版本。解决这个问题的更常见方式是发布module的新patch版本,或者升级module的major版本号。从Go 1.16版本开始,Go Module作者还可以在go.mod中使用retract标识作废的版本,以及使用Deprecated注释行提示作废的module版本。升级major版本号时,作者需要建立新的major分支并修改go.mod文件中的module path。消费者在依赖module进行major版本号升级后,只需要在import路径的后面增加/vN,并对不兼容的部分进行修改。在实际操作中,也有一些Go Module的仓库,始终将master或main分支作为最高major版本的分支,然后建立低版本分支来维护低major版本的module代码。在单repo多module管理方式下,升级module的major版本号有些复杂,需要分为两种情况来考虑。在这些情况下,需要建立major分支矩阵来维护不同module的版本。总的来说,Go Module经过多年打磨已经逐渐成熟,对各种Go Module仓库的布局方式都提供了很好的支持。无论是发布module打版本号还是升级major版本号,Go Module都提供了相应的解决方案。
《Tony Bai · Go 语言第一课》,新⼈⾸单¥59
全部留言(4)
- 最新
- 精选
- bearlu老师,你好。有没有构建module的项目过程的资料?比如我新建一个项目,想发布出去,整个流程是如何?
作者回复: 文章里没有将这个过程整理成流程图。但是结合这篇加餐以及专栏中讲解go module的章节,可以自己整理一下。整理过程中,如遇到具体问题,可以留言。
2022-02-0831 - 黄常凯在代码里import的包,是怎么找到github上的呢?是goproxy的作用吗
作者回复: import后面的导入路径就是go module所在路径啊。 比如:import "github.com/xxxx/yyyy", go就可以直接去github.com/xxxx/yyyy去下载的啊。当然有了goproxy的存在,如果goproxy上已经cache了所需要的版本,那么就可以直接从goproxy上获取到。如果没有,那么goproxy也是会根据go module的路径直接去github上找到。 当然github.com只是go module托管较多的代码站点,你还可以用gitlab、bitbucket等,道理是一样的。
2022-05-27 - 谢小路一个隐性规则,tag 永远递增(不会删除,更不会递减),就能避免很多问题。
作者回复: 👍
2022-04-25 - 奕有个疑问: 发布版本的时候是 V2.0.0 , 安装的时候 是不是直接找 v2.0.0 这个 tag就可以了? 和 go.mod 指定的版本是没有关系? go.mod 指定的版本 只是依赖模块内部进行区分的
作者回复: 问题中的“安装”是指哪个环节?go install么?
2022-02-142