go get 与 go install 在 go.sum 文件上

DDa*_*ave 0 go

我正在使用 go 1.20.3

我刚刚使用 go get 和 go install 安装了这个软件包

go get -v github.com/mactsouk/go/simpleGitHub
go install  github.com/mactsouk/go/simpleGitHub
Run Code Online (Sandbox Code Playgroud)

我的 go.sum 文件中的内容是:

github.com/mactsouk/go v0.0.0-20180603081621-6a282087f7bd h1:TqJGx/jAxlJ3RNL7pS7XZQlvtH8rL/dUsA8wPe9W4y0=
github.com/mactsouk/go v0.0.0-20180603081621-6a282087f7bd/go.mod h1:TRtlPc1xi1zOQdbA/cIxGdS+fCaIZDQUpMrFlET5dbI=
Run Code Online (Sandbox Code Playgroud)

go.mod 文件是:

module calculator

go 1.20

require github.com/mactsouk/go v0.0.0-20180603081621-6a282087f7bd // indirect
Run Code Online (Sandbox Code Playgroud)

aod 在我的 $Home/go/pkg/mod/github.com/mactsouk/ 上

dr-xr-xr-x  5 user  staff  160 Jul  4 18:42 go@v0.0.0-20180603081621-6a282087f7bd
Run Code Online (Sandbox Code Playgroud)

$Home/go/bin/ 上没有任何内容,只有两个文件,为什么 go install 没有复制 simpleGitHub 模块的二进制文件?

drwxr-xr-x  4 user  staff       128 Jun 26 23:37 .
drwxr-xr-x  4 user  staff       128 Jun 26 23:35 ..
-rwxr-xr-x  1 user  staff   3410064 Jun 26 23:35 go-outline
-rwxr-xr-x  1 user  staff  28237216 Jun 26 23:37 gopls
Run Code Online (Sandbox Code Playgroud)

go get 和 go install 之间有区别吗?为什么我在 go.sum 上将此模块文件保存了两次?

小智 5

获取与安装

Go 中的go getgo install命令有不同的用途:

go get用于从远程存储库检索和下载包及其依赖项。它使用下载的软件包的版本更新 go.mod 和 go.sum 文件。如果包已经存在,go get 会将其更新到最新版本。

go install在项目的GOPATHGOBIN中编译并安装包。它不会更新 go.mod 或 go.sum 文件。相反,它使用这些文件中的信息来确定要使用的依赖项的正确版本。

在您的情况下,当您运行 go get 时,它会下载并安装软件包 github.com/mactsouk/go/simpleGitHub 及其依赖项。此操作使用下载的包的版本更新了 go.mod 和 go.sum 文件。

当您随后对同一个包运行 go install 时,不需要再次下载该包,因为它已经存在于本地 Go 模块缓存中。因此,go install 使用了缓存中的现有包及其版本,并且没有修改 go.mod 或 go.sum 文件。

您看到该模块在 go.sum 文件中列出两次的原因是它包含模块版本(v0.0.0-20180603081621-6a282087f7bd)及其相应的带有校验和的 go.mod 文件。这是预期的行为并确保依赖关系的完整性。

总结一下,go get 和 go install 的目的不同,go.sum 文件中模块的重复是正常的。