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

时间:2016-02-27 12:22:32

标签: go

标题几乎总结了它。如何判断GOOS和GOARCH的值只是go可执行文件?

1 个答案:

答案 0 :(得分:8)

编辑:Go {1.1}中runtime.GOROOT()的行为已更改,有关详细信息,请参阅Go 1.10 release notes # 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在编译时记录,并由此包中的常量或函数提供,但它们不会影响运行时系统的执行。

GOARCHGOOS的可能组合列表可在此处找到:https://golang.org/doc/install/source#environment

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

runtime.GOOS
runtime.GOARCH

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

例如,请参阅此简单应用:

func main() {
    fmt.Println(runtime.GOOS)
    fmt.Println(runtime.GOARCH)
}

让我们说GOOS=windowsGOARCH=amd64。使用go run xx.go运行它将打印:

windows
amd64

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

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

windows
386

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

windows
amd64