07|构建模式:Go Module的6类常规操作
该思维导图由 AI 生成,仅供参考
为当前 module 添加一个依赖
- 深入了解
- 翻译
- 解释
- 总结
Go Module是Go语言中用于管理依赖包的工具。本文详细介绍了Go Module的六类常规操作,包括添加依赖包、升级/降级依赖版本、导入主版本号大于1的依赖包路径、移除依赖以及使用vendor机制。通过示例代码和命令演示了手动执行go get命令和自动分析下载依赖项的go mod tidy命令。文章还强调了语义导入版本机制的原则,以及如何使用go mod vendor命令进行依赖包的管理。总的来说,本文通过实际操作和技术原理的解释,帮助读者快速了解Go Module的常规操作,为Go开发人员提供了实用的技术指导。
《Tony Bai · Go 语言第一课》,新⼈⾸单¥59
全部留言(59)
- 最新
- 精选
- lesserrorTony Bai 老师这一讲的内容很实用,可以说有很多Go教程都没有涉及到这块知识的归纳总结。 麻烦老师抽空回答一下我以下的疑问: 1. 空导入的方式的作用吗?我看很多源码中有使用这种包导入的方式。 2. 在go module构建模式下,怎么对vendor目录的有无进行取舍呢?老师有什么实战建议呢?
作者回复: 问题1: 像下面代码这样的包导入方式被称为“空导入”: import _ "foo" 空导入也是导入,意味着我们将依赖foo这个路径下的包。但由于是空导入,我们并没有显式使用这个包中的任何语法元素。那么空导入的意义是什么呢?由于依赖foo包,程序初始化的时候会沿着包的依赖链初始化foo包,我们在08里会讲到包的初始化会按照常量->变量->init函数的次序进行。通常实践中空导入意味着期望依赖包的init函数得到执行,这个init函数中有我们需要的逻辑。 问题2: 通常我们直接使用go module(非vendor)模式即可满足大部分需求。如果是那种开发环境受限,因无法访问外部代理而无法通过go命令自动解决依赖和下载依赖的环境下,我们通过vendor来辅助解决。
2021-10-27837 - blurgo mod edit -require=github.com/sirupsen/logrus@v1.7.0这个指令在win 上的golangd好像会因github 后面的那个 . 识别不出来path,加引号变成 go mod edit -require="github.com/sirupsen/logrus@v1.7.0"就可以了
作者回复: 感谢提供不同平台的差异。
2021-10-28225 - Aaron Liu如果之前引用的包是v1,之后升级v2,go get可以替换引用的包,但源码里的import要怎么改,如果很多go文件都引用了呢
作者回复: 源码中必须要改,改为xxx/v2。这个要么手动改,要么使用IDE/编辑器提供的工具进行统一替换。
2021-10-27617 - return老师讲太好了, 有主线 有关键细节, 请教老师, 关于vendor, 存好副本后, 一般在其他地方怎么用呢, 手动传输过去 还是 上传到代码库再下载呢
作者回复: 如果采用vendor模式,建议与项目代码同等对待,一并上传的代码仓库中。其他地方直接下载使用。
2021-10-27214 - 女干部老师你好, 有一个疑问困扰我很久了,这样一个例子: 安装 go get -u github.com/cweill/gotests/... 然后就可以在命令行里执行 gotests了, 我想知道/...这是个什么写法, 还有gotests.exe,是怎么构建并被放到我的%USERPROFILE%\go\bin目录下的 辛苦
作者回复: 1. ...表示gotests下面的所有的包 2. go get会下载gotests下面所有的包,如果gotests是一个可执行文件的项目(带有main包main函数). go get会在下载包之后构建这个项目并把可执行文件放入$GOPATH/bin下。
2021-12-0113 - 运维夜谈老师这个专栏绝了,真的收获很大! 老师,想请教个问题,在一些无法连接外网的环境下,Go Module有没有类似maven和Nexus一样可以搭建自己的私库,然后私库去连接外部代理去下载依赖?
作者回复: 目前私有代理做的比较好的有goproxy.io、goproxy.cn、athen等。我在后面的加餐中会聊到这个话题。
2021-12-22311 - lesserror大白老师,如果我想升级go.mod中定义的Go版本的话,最佳实践是不是这么操作: go mod edit -go=1.17
作者回复: 这个操作我觉得没啥最佳实践,我一般直接用vim打开go.mod文件,然后改就是了:)。
2021-12-1726 - ll我是一名前端,初“卷”到go,对比 go module 对比 npm (node 的包管理): 1. vendor 类似于 node 项目中的 node_modules, 2. 默认条件下用 go get xxx 相当于 npm i -g xxx, 总之,我的方法就是结合新学的内容,和我熟悉的其他语言体系做对比;这样一是方便记忆,二可以更好的理解新知识。 老师的课条理清晰,深入浅出,点赞
作者回复: 欢迎来到go世界。
2021-11-1756 - ParadiseTony 的专栏不适合跳着看,因为细节干货太多啦哈哈,感谢老师
作者回复: 👍。嗯嗯,尽量按顺序看。
2022-04-094 - jacky讲得挺好,就是更新有点慢啊,这得更到啥时候
作者回复: 一周三篇,已经很快了:)。写稿不易,欢迎继续、持续支持!
2021-10-284