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

Always require the latest version of a dependency in go.mod

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

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

require (
    gonum.org/v1/gonum latest
)

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

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

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

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

只是 运行 go get <module>.

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

中指定了 latest

is there a way to structure go.mod so that the latest version of a dependency is always used?

不,您不应该自己手动编辑 go.mod require 指令的内容。此外,require 指令的语法是 defined as:

require module-path module-version

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

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

相关: