有没有办法知道二进制文件是用哪个版本构建的?
我的工作站上有多个 go 实例,因此我想验证是否使用了正确的实例。
以下命令应该可以做到这一点:
# strings binary_path | grep 'go1\.'
go1.5.3
在运行时使用 runtime.Version() 来确定你的二进制文件是用哪个版本的 Go 构建的:
func Version() string
Version 返回 Go 树的版本字符串。它要么是一个序列 数字,或者如果可能的话,发布标签,如“release.2010-03-04”。 A 尾随 + 表示该树当时进行了本地修改 构建的。
对于现有二进制文件,请使用
go version
命令:
用法:
go version [-m] [-v] [file ...]
Version 打印 Go 可执行文件的构建信息。
Go 版本报告用于构建每个指定名称的 Go 版本 可执行文件。
如果命令行上没有命名文件,go version 会打印自己的文件 版本信息。
如果指定了目录,go 版本会递归地遍历该目录, 寻找公认的 Go 二进制文件并报告其版本。 默认情况下,go版本不会报告发现无法识别的文件 在目录扫描期间。
标志导致它报告无法识别的文件。-v
标志导致 go version 打印每个可执行文件的嵌入内容 模块版本信息(如果可用)。在输出中,模块 信息由版本行后面的多行组成,每行 以前导制表符缩进。-m
使用
go version <path>
。
$ go version /usr/bin/syncthing
/usr/bin/syncthing: go1.13.10
$ go version
go version go1.14.3 linux/amd64
另一种方法是构建一个独立的 go 二进制文件,输出传递给它的其他二进制文件的 go 构建信息。
import "debug/buildinfo"
…
inbin := os.Args[1]
binfo, err := buildinfo.ReadFile(inbin)
fmt.Printf("%s: %s\n", inbin, binfo.GoVersion)
这样的二进制文件可以在没有设置 GOROOT 的环境中使用,因此无法调用“go 版本”。