鉴于可执行文件,我可以确定用于构建它的GOOS和GOARCH的值吗?

moz*_*zey 4 go

标题几乎总结了它.如何确定GoOS可执行文件的GOOS和GOARCH值?

icz*_*cza 8

编辑:runtime.GOROOT() Go 1.10 中更改的行为,有关详细信息,请参阅Go 1.10发行说明#Runtime.现在基本上runtime.GOROOT()检查是否GOROOT设置了环境变量,如果是,则返回其值.如果不是,则返回GOROOT编译时记录的值.


查看runtime包裹:

GOARCH,GOOS,GOPATH和GOROOT环境变量完成了Go环境变量集.它们影响Go程序的构建(参见https://golang.org/cmd/gohttps://golang.org/pkg/go/build).GOARCH,GOOS和GOROOT在编译时记录,并由此包中的常量或函数提供,但它们不影响运行时系统的执行.

对于可能的组合列表GOARCH,并GOOS可以在这里找到:https://golang.org/doc/install/source#environment

所以你要找的是runtime包中的常量:

runtime.GOOS
runtime.GOARCH
Run Code Online (Sandbox Code Playgroud)

它们将完全包含构建应用程序时存在的值.

例如,看看这个简单的应用程序

func main() {
    fmt.Println(runtime.GOOS)
    fmt.Println(runtime.GOARCH)
}
Run Code Online (Sandbox Code Playgroud)

比方说GOOS=windowsGOARCH=amd64.运行它将go run xx.go打印:

windows
amd64
Run Code Online (Sandbox Code Playgroud)

从中构建一个exe(例如go build).运行exe具有相同的输出.

现在GOARCH改为386.如果你运行它go run(或构建一个exe并运行它),它将打印:

windows
386
Run Code Online (Sandbox Code Playgroud)

如果您运行以前构建的exe,它仍将打印:

windows
amd64
Run Code Online (Sandbox Code Playgroud)