安装所有Go Mod依赖二进制文件



我使用go1.16.3和这个工具文件来合并依赖:

// +build tools
package main
import (
_ "github.com/swaggo/swag/cmd/swag"
_ "honnef.co/go/tools/cmd/staticcheck"
)

在项目目录下运行go get会下载并安装到$GOPATH/pkg/mod,但不会安装到$GOPATH/bin为每个mod单独运行go get(即go get github.com/swaggo/swag/cmd/swag)

安装包和二进制文件。是否有一种方法,我可以用一个命令安装所有mod的二进制文件?

如果没有,那么自动安装所有依赖的所有包和二进制文件的正确方法是什么?

在单个命令中执行此操作并不是一个好方法。您最好的选择可能是一个脚本,该脚本链接go list命令以列出来自工具的所有导入。进入go install命令:

tools=$(go list -f '{{range .Imports}}{{.}} {{end}}' tools.go)
go install $tools

为了解释上述内容,go list查询包和模块。默认情况下,它只打印包名,但可以使用-f-json控制其输出。go help list显示go list可以打印的所有内容。-f的语法与text/template相同。

所以这里,go list tools.go查询一个包,它是一个。go文件列表,在本例中,只是tools.go。.Imports是一个经过排序、重复数据删除的来自该包的导入列表。我们可以只使用模板{{.Imports}},但是它在开头和结尾打印括号。

$ go list -f '{{.Imports}}' tools.go
[github.com/swaggo/swag/cmd/swag honnef.co/go/tools/cmd/staticcheck]

因此,我们在.Imports范围内,在范围内,我们打印每个导入({{.}})后跟一个空格。

相关内容

最新更新