亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

修復 go 使用的工具版本

修復 go 使用的工具版本

Go
智慧大石 2023-05-04 17:17:40
我希望使用 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。
查看完整描述

2 回答

?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

我做的非常相似,但差異很大,我認為值得再次分享:


如果你得到一個錯誤

我沒有看到我想要添加到 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 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 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.15

go 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.toml

package main


// ...


查看完整回答
反對 回復 2023-05-04
?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

go1.11 使用 go modules 的解決方案是創建一個假的工具包。您創建一個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 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)


查看完整回答
反對 回復 2023-05-04
  • 2 回答
  • 0 關注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號