`go get ...` 和 `go get -u ...` 之间有什么区别?

des*_*enV 12 go

go get ...go mod中,和命令有什么区别go get -u ...

Eli*_*sky 27

您可以用来-u将依赖项更新到最新的可用次要版本和补丁版本。因此,如果您的模块使用 package foo.com/bar,运行时go get -u foo.com/bar不仅会更新foo.com/bar到最新的 MINOR.PATCH,还会更新其依赖项。

Go 模块遵循semver:MAJOR.MINOR.PATCH

MINOR 和 PATCH 中的更改永远不会破坏用户,因此它们可以“安全”地自动更新。也就是说,保守方法(没有-u)不会更新它们,并且在某些情况下是合适的。


模块 wiki中的一段有趣的引用:

一个常见的错误是认为 go get -u foo 仅获取 foo 的最新版本。实际上, go get -u foo 或 go get -u foo@latest 中的 -u 意味着还获取 foo 的所有直接和间接依赖项的最新版本。升级 foo 时的一个常见起点是执行 go get foo 或 go get foo@latest 而不带 -u (并且在一切正常后,考虑 go get -u=patch foo、go get -u=patch、go get - u foo,或者 go get -u)。