猿问

修复 go 使用的工具版本

我希望使用 go 创建可重现的构建。对于个别项目,我们使用 glide。

所以例如我使用:

glide get github.com/stretchr/testify

修复“证明”包的版本。但是,这不适用于工具。例如:

glide install github.com/tebeka/go2xunit

返回成功但实际上并没有安装 go2xunit 所以我必须使用:

go get github.com/tebeka/go2xunit

它将go2xunit安装到$GOPATH/bin

Q 如何修复go2xunit等工具的版本?

我还注意到glide 说使用 dep 而不是dep 说golang 已经偏离了它的实现并且可能最终会使用基于vgo的东西。有大量的依赖管理工具,也许不太知名的工具之一支持这个?

如果相关,我正在使用 Debian9 提供的 go 1.7.4。


智慧大石
浏览 113回答 2
2回答

慕沐林林

我做的非常相似,但差异很大,我认为值得再次分享:如果你得到一个错误我没有看到我想要添加到 go.mod 的依赖项,我收到了这个错误:tools/tools.go:6:5: import "github.com/UnnoTed/fileb0x" is a program, not an importable package(fileb0x 是我要添加的东西)我不是 100% 清楚修复它的事件顺序,但我做了所有这些事情:使用“工具”包我做了一个tools目录:mkdir -p tools我把工具包放在里面(如上所述):// +build toolspackage toolsimport (    _ "github.com/UnnoTed/fileb0x")请注意,标签大多不重要。你可以使用 foo:// +build foo但是,您不能使用ignore. 那是一个特殊的预定义标签。// +build ignore// NO NO NO NO NO// `ignore` is a special keyword which (surprise) will cause// the file to be ignore, even for dependencies更新 go.mod最好的方法可能是运行go mod tidy:go mod tidy然而,在我这样做之前,我运行了一些命令试图找出哪个命令会导致它进入go.mod:go install github.com/UnnoTed/fileb0x # didn't seem to do the trickgo getgo generate ./...go build ./...go install ./...go mod vendor后来我做了一个git resetand rm -rf ~/go/pkg/mod; mkdir ~/go/pkg/mod,发现它go mod tidy自己做得很好。销售为了真正利用项目中的模块缓存,您需要复制源代码go mod vendor这将从 go.mod 获取所有依赖项您还需要更改几乎所有的 go 命令以-mod=vendor在任何Makefiles、Dockerfiles 或其他脚本中使用。go fmt -mod=vendor ./... # has a bug which should be fixed in go1.15go generate -mod=vendor ./...go build -mod=vendor ./...这包括go build, go get, go install, 和任何go run被调用的go generate(甚至是它go generate自己)//go:generate go run -mod=vendor github.com/UnnoTed/fileb0x b0x.tomlpackage main// ...

aluckdog

go1.11 使用 go modules 的解决方案是创建一个假的工具包。您创建一个tools.go文件,如下所示:// +build toolspackage toolsimport (        _ "github.com/tebeka/go2xunit")+build tools 是一个神奇的注释,它会阻止构建包。>go mod init tools将为假工具包创建一个go.mod文件>go install github.com/tebeka/go2xunit将安装 go2xunit 并更新 go.mod 如下。module toolsrequire github.com/tebeka/go2xunit v1.4.8 // indirect现在,如果您将来运行go install github.com/tebeka/go2xunit (对于干净的构建而言),其版本将由 go.mod 固定为 v1.4对于 1.11 之前的 go 版本,使用的工具是retool。它是这样工作的:引导程序:go get github.com/twitchtv/retool添加工具:retool add github.com/jteeuwen/go-bindata/go-bindata origin/master使用工具:retool do go-bindata -pkg testdata -o ./testdata/testdata.go ./testdata/data.json添加对此的支持可能在目标 go 1.12 的路线图上(https://github.com/golang/go/issues/27653)
随时随地看视频慕课网APP

相关分类

Go
我要回答