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
// ...

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)
- 2 回答
- 0 關注
- 162 瀏覽
添加回答
舉報