在 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
,否则你就不会有确定性依赖。
相关:
撇开这是否是个好主意,有没有一种方法可以构造 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
,否则你就不会有确定性依赖。
相关: