有没有一种好方法可以通过在GOPATH中默认为依赖版本来初始化go mods?

有没有一种好方法可以通过在GOPATH中默认为依赖版本来初始化go mods?,go,go-modules,Go,Go Modules,我正在开始将我的应用程序从目前不使用任何依赖关系管理器切换到使用go模块的过程。我希望使用当前使用的所有相同版本的依赖项,以避免不同版本的依赖项导致不可预见问题的风险。因为我有一个包含很多应用程序的微服务体系结构,所以我试图找出是否有比对照构建服务器的GOPATH中当前的内容检查每个应用程序及其各自的依赖关系更好的方法来实现这一点 有没有办法,即使在第一次初始化go mods时只有一次,让go模块默认为GOPATH中的版本 如果不可能(我强烈感觉不可能),是否可以使用go list或类似的工具来

我正在开始将我的应用程序从目前不使用任何依赖关系管理器切换到使用go模块的过程。我希望使用当前使用的所有相同版本的依赖项,以避免不同版本的依赖项导致不可预见问题的风险。因为我有一个包含很多应用程序的微服务体系结构,所以我试图找出是否有比对照构建服务器的GOPATH中当前的内容检查每个应用程序及其各自的依赖关系更好的方法来实现这一点

有没有办法,即使在第一次初始化go mods时只有一次,让go模块默认为GOPATH中的版本


如果不可能(我强烈感觉不可能),是否可以使用go list或类似的工具来打印导入的依赖项和GOPATH中存在的当前git sha?

从项目目录的根目录:

go mod init
要拉入生成(以及可选的测试依赖项),请执行以下操作:

以上内容将获取每个依赖项的最新()版本。这可能不是您用于
GOPATH
build的版本

因此,为了确保您获得最新的提交(这是
GOPATH
构建使用的内容),我将在
go.mod
中检查每个依赖项,并向
master
发出手动更新。例如,假设您有
logrus
作为依赖项,以更新到最新提交:

go get github.com/sirupsen/logrus@master
如果最新的
semver
与最新的提交匹配,则不会发生任何更改,但如果不匹配,则将获得标记版本加上提交样式的伪版本

Go wiki还有其他功能,例如快进,从现在起一个月/一年,将您的依赖项的最新版本拉入您的
Go.mod
(和
Go.sum
):

但是再次注意,如果依赖项不使用或已切换到a,则上述操作将不起作用

最佳做法是关注回购协议:

  • 它是否支持go模块(即,它是否在顶层或导入路径层具有一个
    go.mod
  • git回购是否已标记
  • 如果最近的提交被标记

只有这样,您才能确保获得预期的版本。

转到列表
不显示提交信息(您可以通过
转到帮助列表
查看所有格式选项)。您可能会使用一个遗留工具,如
govendor
来构建
vendor
目录,并从中初始化模块。请注意,如果GOPATH中的任何依赖项已切换到模块,您可能会发现您使用的版本不正确,并且仍然可能会看到更改。是的,我基本了解导入的工作方式以及mods默认使用的版本。我只是希望有一种不那么手工的方式来将我的依赖版本设置为我已经在所有需要更改的回购中使用的版本。看起来我可能在这方面运气不好。这真的应该是一个手动过程。GOPATH构建是“狂野的西部”——今天可能编译的东西明天很可能被破坏。最好仔细查看所有依赖项及其版本,以确保构建的一致性。
go get github.com/sirupsen/logrus@master
go get -u ./...