标题几乎总结了一下。如何确定仅go可执行文件才获得了GOOS和GOARCH的值?
编辑:runtime.GOROOT()在Go 1.10 中更改的行为,有关详细信息,请参见Go 1.10发行说明#Runtime。现在基本上runtime.GOROOT()检查是否GOROOT设置了环境变量,如果已设置,则返回其值。如果不是,则返回GOROOT编译时记录的值。
runtime.GOROOT()
GOROOT
检查runtime包装:
runtime
GOARCH,GOOS,GOPATH和GOROOT环境变量完善了Go环境变量集。它们会影响Go程序的构建(请参阅https://golang.org/cmd/go和https://golang.org/pkg/go/build)。 GOARCH,GOOS和GOROOT会在编译时记录下来, 并通过此包中的常量或函数提供,但它们不会影响运行时系统的执行。
GOARCH和的可能组合列表,GOOS可在以下位置找到:https : //golang.org/doc/install/source#environment
GOARCH
GOOS
因此,您要查找的是runtime包中的常量:
runtime.GOOS runtime.GOARCH
它们将完全包含构建您的应用程序时存在的值。
例如,请参见以下简单应用程序:
func main() { fmt.Println(runtime.GOOS) fmt.Println(runtime.GOARCH) }
假设GOOS=windows和GOARCH=amd64。运行它将go run xx.go打印:
GOOS=windows
GOARCH=amd64
go run xx.go
windows amd64
从中构建一个exe(例如go build)。运行exe具有相同的输出。
go build
现在更改GOARCH为386。如果使用go run(或构建一个exe并运行它)运行它,它将显示:
386
go run
windows 386
如果您运行以前构建的exe,它将仍然打印: