找出构建二进制文件的 Go 版本?

问题描述 投票:0回答:4

有没有办法知道二进制文件是用哪个版本构建的?

我的工作站上有多个 go 实例,因此我想验证是否使用了正确的实例。

go
4个回答
49
投票

以下命令应该可以做到这一点:

# strings binary_path | grep 'go1\.' 
go1.5.3

32
投票

在运行时使用 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
标志导致它报告无法识别的文件。

-m
标志导致 go version 打印每个可执行文件的嵌入内容 模块版本信息(如果可用)。在输出中,模块 信息由版本行后面的多行组成,每行 以前导制表符缩进。


19
投票

使用

go version <path>

$ go version /usr/bin/syncthing
/usr/bin/syncthing: go1.13.10

$ go version
go version go1.14.3 linux/amd64

0
投票

另一种方法是构建一个独立的 go 二进制文件,输出传递给它的其他二进制文件的 go 构建信息。

import "debug/buildinfo"
…
inbin := os.Args[1]
binfo, err := buildinfo.ReadFile(inbin)
fmt.Printf("%s: %s\n", inbin, binfo.GoVersion)

这样的二进制文件可以在没有设置 GOROOT 的环境中使用,因此无法调用“go 版本”。

© www.soinside.com 2019 - 2024. All rights reserved.