首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修复go所用工具的版本

修复go所用工具的版本
EN

Stack Overflow用户
提问于 2018-10-31 14:49:13
回答 2查看 799关注 0票数 1

我期待创建可复制的建设与go。对于个别的项目,我们正在使用滑翔。

例如,我使用:

代码语言:javascript
复制
glide get github.com/stretchr/testify

修正“指证”方案的版本。然而,对于工具来说,这是行不通的。例如:

代码语言:javascript
复制
glide install github.com/tebeka/go2xunit

返回成功,但实际上没有安装go2xunit,因此我必须使用:

代码语言:javascript
复制
go get github.com/tebeka/go2xunit

它将go2xunit安装到$GOPATH/bin。

Q如何修复像go2xunit?这样的工具的版本

我还注意到,滑翔说用dep代替和dep表示戈朗已经偏离了它的实施。,并可能最终使用基于vgo的东西。有大量的依赖关系管理工具用于go,也许其中一个不太知名的工具支持这一点?

如果与此相关,我使用的是Debian9提供的go 1.7.4。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-31 17:45:57

使用go模块的go1.11的解决方案是创建一个假工具包。创建一个tools.go文件,如下所示:

代码语言:javascript
复制
// +build tools

package tools

import (
        _ "github.com/tebeka/go2xunit"
)

+build tools是一个神奇的注释,它阻止构建包。

代码语言:javascript
复制
>go mod init tools

将为假工具包创建一个go.mod文件。

代码语言:javascript
复制
>go install github.com/tebeka/go2xunit

将安装go2xunit和更新go.mod,如下所示。

代码语言:javascript
复制
module tools

require github.com/tebeka/go2xunit v1.4.8 // indirect

现在,如果你运行go,安装github.com/tebeka/go2xunit在将来(为了一个干净的构建),它的版本将由go.mod修正为v1.4。

对于1.11之前的go版本,可以使用的工具是重工具。它的工作方式如下:

自举:

代码语言:javascript
复制
go get github.com/twitchtv/retool

添加工具:

代码语言:javascript
复制
retool add github.com/jteeuwen/go-bindata/go-bindata origin/master

使用工具:

代码语言:javascript
复制
retool do go-bindata -pkg testdata -o ./testdata/testdata.go ./testdata/data.json

添加对此的支持可能会出现在目标go 1.12 (https://github.com/golang/go/issues/27653)的路线图上

票数 0
EN

Stack Overflow用户

发布于 2020-02-24 20:29:14

我也是这样做的,但是有很大的不同,我觉得值得再分享一次:

如果你犯了错误

我没有看到我想要添加到go.mod中的依赖项,而且我得到了这个错误:

代码语言:javascript
复制
tools/tools.go:6:5: import "github.com/UnnoTed/fileb0x" is a program, not an importable package

(fileb0x是我想要添加的东西)

我对修复它的事件顺序并不十分清楚,但我做了所有这些事情:

使用“工具”包

我创建了一个tools目录:

代码语言:javascript
复制
mkdir -p tools

我将工具包放入其中(如上文所述):

代码语言:javascript
复制
// +build tools

package tools

import (
    _ "github.com/UnnoTed/fileb0x"
)

注意,标记通常并不重要。你可以用foo:

代码语言:javascript
复制
// +build foo

但是,您不能使用ignore。这是一个特殊的预定义标签。

代码语言:javascript
复制
// +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

代码语言:javascript
复制
go mod tidy

然而,在我这样做之前,我运行了一些命令,试图找出哪个命令会导致它进入go.mod

代码语言:javascript
复制
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 resetrm -rf ~/go/pkg/mod; mkdir ~/go/pkg/mod,发现go mod tidy自己做得足够好。

扶手

为了实际利用项目中的模块缓存,需要在源代码中复制

代码语言:javascript
复制
go mod vendor

,它将从go.mod获取所有依赖项。

您还需要更改几乎所有go命令,以便在任何-mod=vendorDockerfile或其他脚本中使用Dockerfile

代码语言:javascript
复制
go fmt -mod=vendor ./... # has a bug which should be fixed in go1.15
go generate -mod=vendor ./...
go build -mod=vendor ./...

其中包括go buildgo getgo installgo generate调用的任何go run (甚至go generate本身)。

代码语言:javascript
复制
//go:generate go run -mod=vendor github.com/UnnoTed/fileb0x b0x.toml
package main

// ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53086136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档