本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《如何在GOPATH中使用默认依赖版本初始化go mods?》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~
问题内容我正在开始将我的应用程序从当前不使用任何依赖项管理器切换为使用 go 模块。我想使用当前使用的所有相同版本的依赖项,以避免不同版本的依赖项导致不可预见的问题的风险。由于我有一个包含大量应用程序的微服务架构,因此我试图找出是否有更好的方法来执行此操作,而不是根据构建服务器的 GOPATH 中当前的内容检查每个应用程序及其各自的依赖关系。
有没有什么办法,即使只是在第一次初始化 go mods 时一次,让 go 模块默认为 GOPATH 中的版本。
如果这是不可能的(我强烈感觉不可能),是否可以使用 go list 或类似的东西来打印导入的依赖项和 GOPATH 中存在的当前 git sha?
解决方案
从项目目录的根目录:
go mod init
引入构建(以及可选的测试依赖项):
go build ./... # ... notation will scan any subdirectories for any nested packages/tools
go test ./... # optional
以上内容将拉取每个依赖项的最新(semver)版本。这可能不是您在 gopath
构建中使用的版本。
因此,为了确保您获得最新的提交(这就是 gopath
构建使用的内容) - 我将遍历 go.mod
中的每个依赖项并对 master
发出手动更新。例如,假设您有 logrus
作为依赖项,以更新到最新的提交:
go get github.com/sirupsen/logrus@master
如果最新的 semver
与最新的提交匹配 - 不会发生任何更改 - 但如果不是,您将获得标记版本加上提交样式伪版本。
go wiki 还有其他 go-modules daily workflows,例如快进,从现在开始一个月/一年,将最新版本的依赖项拉入 go.mod
(和 go.sum
):
go get -u ./...
但请再次注意,如果依赖项不使用 semver 或已切换到 v2 breaking change - 以上将不起作用。
最佳实践是关注存储库:
- 它是否支持 go-modules(即它是否在顶层或导入路径级别有
go.mod
) - git 存储库是否已标记
- 以及最新提交是否已标记
只有这样您才能确定您获得的是您期望的版本。
理论要掌握,实操不能落!以上关于《如何在GOPATH中使用默认依赖版本初始化go mods?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注编程网公众号吧!