goget命令和gomoddownload命令有什么区别
我试图对 Go 模块有一个很好的理解,但对 go get 命令和 go mod download 命令之间的区别有点困惑。
“go get 命令更新主模块的 go.mod 文件中的模块依赖关系,然后构建和安装命令行中列出的包。” https://golang.org/ref/mod#go-get
而 Go mod 下载描述为:
"go mod download 命令将命名模块下载到模块缓存中。" https://golang.org/ref/mod#go-mod-download
显然 go get 执行了一些 go mod download 没有的依赖管理,但是使用 go get 安装包和在 go mod download 中将模块下载到模块缓存有什么区别。
回答
您的模块的go.mod文件记录了它需要哪些版本的依赖项。这些依赖项的源代码存储在本地缓存中。
go get更新go.mod文件中列出的要求。它还确保这些需求是自洽的,并根据需要添加新需求,以便您在命令行中命名的包导入的每个包都由您的需求中的某个模块提供。
作为更新和添加需求的副作用,go get还将包含命名包(及其依赖项)的模块下载到本地模块缓存。
相比之下,go mod download 不添加新需求或更新现有需求。(最多,它会确保现有需求是自洽的,如果您手动编辑了go.mod文件,就会发生这种情况。)它只下载您请求的特定模块版本(如果您请求特定版本),或者出现在您的需求中的模块版本。