我期待创建可复制的建设与go。对于个别的项目,我们正在使用滑翔。
例如,我使用:
glide get github.com/stretchr/testify修正“指证”方案的版本。然而,对于工具来说,这是行不通的。例如:
glide install github.com/tebeka/go2xunit返回成功,但实际上没有安装go2xunit,因此我必须使用:
go get github.com/tebeka/go2xunit它将go2xunit安装到$GOPATH/bin。
Q如何修复像go2xunit?这样的工具的版本
我还注意到,滑翔说用dep代替和dep表示戈朗已经偏离了它的实施。,并可能最终使用基于vgo的东西。有大量的依赖关系管理工具用于go,也许其中一个不太知名的工具支持这一点?
如果与此相关,我使用的是Debian9提供的go 1.7.4。
发布于 2018-10-31 17:45:57
使用go模块的go1.11的解决方案是创建一个假工具包。创建一个tools.go文件,如下所示:
// +build tools
package tools
import (
_ "github.com/tebeka/go2xunit"
)+build tools是一个神奇的注释,它阻止构建包。
>go mod init tools将为假工具包创建一个go.mod文件。
>go install github.com/tebeka/go2xunit将安装go2xunit和更新go.mod,如下所示。
module tools
require github.com/tebeka/go2xunit v1.4.8 // indirect现在,如果你运行go,安装github.com/tebeka/go2xunit在将来(为了一个干净的构建),它的版本将由go.mod修正为v1.4。
对于1.11之前的go版本,可以使用的工具是重工具。它的工作方式如下:
自举:
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)的路线图上
发布于 2020-02-24 20:29:14
我也是这样做的,但是有很大的不同,我觉得值得再分享一次:
如果你犯了错误
我没有看到我想要添加到go.mod中的依赖项,而且我得到了这个错误:
tools/tools.go:6:5: import "github.com/UnnoTed/fileb0x" is a program, not an importable package(fileb0x是我想要添加的东西)
我对修复它的事件顺序并不十分清楚,但我做了所有这些事情:
使用“工具”包
我创建了一个tools目录:
mkdir -p tools我将工具包放入其中(如上文所述):
// +build tools
package tools
import (
_ "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 trick
go get
go generate ./...
go build ./...
go install ./...
go mod vendor后来我做了一个git reset和rm -rf ~/go/pkg/mod; mkdir ~/go/pkg/mod,发现go mod tidy自己做得足够好。
扶手
为了实际利用项目中的模块缓存,需要在源代码中复制
go mod vendor,它将从go.mod获取所有依赖项。
您还需要更改几乎所有go命令,以便在任何-mod=vendor、Dockerfile或其他脚本中使用Dockerfile。
go fmt -mod=vendor ./... # has a bug which should be fixed in go1.15
go generate -mod=vendor ./...
go build -mod=vendor ./...其中包括go build、go get、go install和go generate调用的任何go run (甚至go generate本身)。
//go:generate go run -mod=vendor github.com/UnnoTed/fileb0x b0x.toml
package main
// ...https://stackoverflow.com/questions/53086136
复制相似问题