前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2019年11月7日 Go生态洞察:Go Modules v2及更高版本

2019年11月7日 Go生态洞察:Go Modules v2及更高版本

作者头像
猫头虎
发布2024-04-09 14:28:19
700
发布2024-04-09 14:28:19
举报

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作为示例的发布过程:

代码语言:javascript
复制
$ pwd
/tmp/gax-go
$ ls
...
$ cat go.mod
module github.com/googleapis/gax-go
...

为了开始github.com/googleapis/gax-gov2开发,我们创建一个新的v2/目录并将包复制进去:

代码语言:javascript
复制
$ mkdir v2
$ cp -v *.go v2
...

接下来,通过复制当前的go.mod文件并添加/v2后缀来创建v2的go.mod文件:

代码语言:javascript
复制
$ 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

代码语言:javascript
复制
$ git tag v2.0.0
$ git push origin v2.0.0

此时,我们需要维护两个主要版本。向后兼容的更改和bug修复将导致新的次要和补丁版本的发布(例如,v1.1.0v2.0.1等)。

总结

重大版本的变化导致了开发和维护的开销,并且要求下游用户投资以迁移到新版本。对于大型项目,这些开销往往更大。重大版本的变化只应在识别到一个有说服力的理由后进行。一旦确定了一个突破性变化的有力理由,我们建议在master分支上开发多个主要版本,因为它与更广泛的现有工具兼容。

v1+模块的重大更改应始终在新的vN+1模块中进行。新模块的发布意味着维护者和需要迁移到新包的用户的额外工作。因此,维护者在进行稳定版本发布之前,应该验证他们的API,并仔细考虑在v1之后是否真的需要重大更改。

本文被猫头虎的Go生态洞察专栏收录,详情点击这里

关键知识点

描述

Go Modules

Go的模块管理系统

版本控制

管理不同版本的策略和实践

导入兼容规则

Go中确保向后兼容性的原则

v2及更高版本

管理和发布Go Modules的新版本

维护多版本

同时维护多个版本的策略

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2019年11月7日 Go生态洞察:Go Modules v2及更高版本 🚀
    • 摘要
      • 引言
        • 正文
          • Go Modules的重大版本和模块路径 🛣️
          • 发布v2及更高版本 🌟
          • 维护多个主要版本 🛠️
        • 总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档