我使用go1.16.3和这个工具文件来合并依赖:
// +build tools
package main
import (
_ "github.com/swaggo/swag/cmd/swag"
_ "honnef.co/go/tools/cmd/staticcheck"
)
在项目目录下运行 安装包和二进制文件。是否有一种方法,我可以用一个命令安装所有mod的二进制文件? 如果没有,那么自动安装所有依赖的所有包和二进制文件的正确方法是什么?go get
会下载并安装到$GOPATH/pkg/mod
,但不会安装到$GOPATH/bin
。为每个mod单独运行go get
(即go get github.com/swaggo/swag/cmd/swag
)将
在单个命令中执行此操作并不是一个好方法。您最好的选择可能是一个脚本,该脚本链接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
范围内,在范围内,我们打印每个导入({{.}}
)后跟一个空格。