`go install` 添加记录到 `go.mod`

`go install` adds record in `go.mod`

我对 Go 模块如何使用 go install 安装二进制文件感到有点困惑。

我尝试通过执行 go install github.com/joho/godotenv/cmd/godotenv 安装 (https://github.com/joho/godotenv) 二进制文件,我发现它在 go.mod 中添加了一条记录。 我迷路了,因为我们没有在代码中使用这个包,并且在 运行 go mod tidy 之后它被删除了(因为它不是代码)。

有人可以解释一下 go 模块的预期行为吗? 其次,我怎样才能避免将它添加到 go.mod 因为我们只需要安装和执行二进制文件?

谢谢。

转到版本:go version go1.13.4 darwin/amd64

Command go: The go.mod file:

The go command automatically updates go.mod each time it uses the module graph, to make sure go.mod always accurately reflects reality and is properly formatted.

go 工具将在执行构建时检测到依赖项不准确时自动更新 go.mod

当您从模块安装 github.com/joho/godotenv/cmd/godotenv 时,此安装至少需要构建/安装有问题的包(以及它的依赖项,可传递)。

您可以安全地运行 go mod tidy 撤消此 "one-time" 依赖项的记录。

一般来说,如果你想禁止 go 工具更新 go.mod 文件,你可以使用 -mod=readonly 标志,但那样会失败 go install ("can't load package: package xxx: import lookup disabled by -mod=readonly")。您可以在此处阅读更多相关信息:Go Wiki: Go modules: Can I control when go.mod gets updated and when the go tools use the network to satisfy dependencies?

或者,如果您想避免这种情况,请在您的模块之外构建/安装您的工具。您可以为此使用 "dummy" 模块。