go get 命令和 go mod 下载命令有什么区别

What is the difference between go get command and go mod download command

我正在努力更好地理解 Go mod 规则,但对 go get 命令和 go mod 下载命令之间的区别感到有点困惑。

"The go get command updates module dependencies in the go.mod file for the main module, then builds and installs packages listed on the command line." https://golang.org/ref/mod#go-get

而 Go mod 下载描述为:

"The go mod download command downloads the named modules into the module cache. " https://golang.org/ref/mod#go-mod-download

很明显 go get 执行了一些依赖管理,而 go mod download 没有,但是用 go get 安装包和下载 modules 到 module 有什么区别在 go mod 下载中缓存。

您的模块的 go.mod 文件记录了它需要哪些版本的依赖项。这些依赖项的源代码存储在本地缓存中。

go get 更新了 go.mod 文件中列出的要求。它还确保这些要求是自洽的,并根据需要添加新的要求,以便您在命令行上命名的包导入的每个包都由您的要求中的某个模块提供。

作为更新和添加需求的副作用go get 还将包含命名包(及其依赖项)的模块下载到本地模块缓存。

相比之下,go mod download 不会 添加新要求或更新现有要求。 (至多,它将确保现有要求是自洽的,如果您手动编辑 go.mod 文件,就会发生这种情况。)它只会下载您请求的特定模块版本(如果您请求特定版本),或出现在您的需求中的模块版本。