安装 All Go Mod 依赖二进制文件
Installing All Go Mod Dependency Binaries
我正在使用带有此工具文件的 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
。 运行 go get
分别为每个 mod(即 go get github.com/swaggo/swag/cmd/swag
) 安装软件包和二进制文件。
有没有办法用一条命令为所有 mod 安装二进制文件?
如果没有,自动安装所有依赖项的所有包和二进制文件的正确方法是什么?
没有真正的好方法可以在单个命令中执行此操作。你最好的选择可能是一个脚本,它链接一个 go list
命令以列出从 tools.go 到 go install
命令的所有导入:
tools=$(go list -f '{{range .Imports}}{{.}} {{end}}' tools.go)
go install $tools
为了解释上面的内容,go list
查询包和模块。默认情况下,它只打印包名,但它的输出可以用 -f
或 -json
控制。 go help list
shows everything go list
can print. The syntax for -f
is the same as 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
,并在范围内打印每个导入 ({{.}}
),然后是 space。
我正在使用带有此工具文件的 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
。 运行 go get
分别为每个 mod(即 go get github.com/swaggo/swag/cmd/swag
) 安装软件包和二进制文件。
有没有办法用一条命令为所有 mod 安装二进制文件?
如果没有,自动安装所有依赖项的所有包和二进制文件的正确方法是什么?
没有真正的好方法可以在单个命令中执行此操作。你最好的选择可能是一个脚本,它链接一个 go list
命令以列出从 tools.go 到 go install
命令的所有导入:
tools=$(go list -f '{{range .Imports}}{{.}} {{end}}' tools.go)
go install $tools
为了解释上面的内容,go list
查询包和模块。默认情况下,它只打印包名,但它的输出可以用 -f
或 -json
控制。 go help list
shows everything go list
can print. The syntax for -f
is the same as 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
,并在范围内打印每个导入 ({{.}}
),然后是 space。