始终需要 go.mod 中最新版本的依赖项

Nat*_*tWH 1 version-control module go

撇开这是否是一个好主意,有没有一种方法可以构造go.mod以便始终使用最新版本的依赖项?

我发现的一种方法是,例如,

require (
    gonum.org/v1/gonum latest
)
Run Code Online (Sandbox Code Playgroud)

使用 eg 时下载并解析为最新版本的 gonum go get。但是,这也会更新我的go.mod文件,删除latest标签。

我是否应该将go.mod文件作为包含latest标签的版本保留在我的 git 存储库中,并允许用户在构建等时更新版本?

Jay*_*rod 6

go.mod. 这实际上go.mod是设计使然:旨在让 go 命令在任何构建中确定性地选择一组版本。如果 go 命令始终选择依赖项的最新版本,则所选版本集将随时间变化而无需任何用户操作。如果您的依赖项之一总是选择其依赖项之一的最新版本,则可能会破坏您的构建,并且很难覆盖。

go get example.com/mod是保持最新状态的最佳方式。这需要手动完成,但如果您有大量依赖项,您可以使用脚本或 CI 中的操作自动完成。


bla*_*een 5

赶紧跑go get <module>

go get下载依赖项的最新版本,因为它就是这样做的,而不是因为您latestgo.mod.

有没有办法构建 go.mod 以便始终使用最新版本的依赖项?

不,无论如何您都不应该go.mod require自己手动编辑指令的内容。require此外,指令的语法定义为:

require module-path module-version

其中module-version可以是实际标记版本或伪版本,例如当您需要特定提交时。

从技术上讲,您可以编写latest指令require,但下次运行命令时go,它将latest用实际的最新(伪)版本标记替换该单词。它不会留下来 latest,否则你就不会有确定性的依赖关系。

相关:如何将 go.mod 中的 Go 模块依赖项指向存储库中的最新提交?