首页 > 解决方案 > 使用“go get”下载二进制文件而不将它们添加到 go.mod

问题描述

我在我的项目和构建系统(例如 Travis CI)中使用 Go 模块我正在下载一个命令行实用程序(用 Go 编写)go get来帮助我的构建过程,例如:

go get github.com/mitchellh/gox

但是,这go get会导致文件被添加到我的go.mod文件中。这污染了构建环境,导致它“脏”(因为在 git 中跟踪的某些文件发生了更改,在本例中为 go.mod 和 go.sum),我用它git describe --always --dirty --tag来描述我的构建,它显示为“肮脏的”。

有没有办法“去获取”一个二进制文件来下载它,而不将它添加到 go.mod/go.sum 中?

我已经尝试将 GOPATH 设置到其他地方,即使那样,也会go get更新 go.mod/go.sum 以将其添加为// indirect依赖项。

dir="$(mktemp -d)"; \
  env GOPATH="$dir" go get github.com/mitchellh/gox && \
  mv "$dir/bin/gox" "$(go env GOPATH)"/bin/gox

标签: gogo-modules

解决方案


从 1.16 开始

Go 1.16(2021 年 2 月发布)包含一项更改,可以在不影响go.mod.

问题 40276跟踪提案:

cmd/go: 'go install' 应该在模块外以模块模式安装可执行文件

这是在CL 254365中实现的。作为此更改的一部分,您可以运行例如:

go install golang.org/x/tools/cmd/goimports@latest

安装二进制文件而不影响go.mod.

要安装特定版本,请替换@latest为 eg @v0.1.5


推荐阅读