如何在运行二进制文件的任何系统上检测$ GOHOSTOS和$ GOHOSTARCH的值?请注意,即使主机上没有安装编译器,我也想检测这些值。
答案 0 :(得分:1)
简短版本,你可以
长版本,您可以创建一个构建脚本,将信息嵌入代码中,例如:
- main.go:
package main
import (
"fmt"
"runtime"
)
var (
hostOS string
hostArch string
)
func main() {
fmt.Println("runtime values:", runtime.GOOS, runtime.GOARCH)
fmt.Println("build time values:", hostOS, hostArch)
}
- build.sh
#!/bin/sh
# replace main. with whatever package you're using
go build -ldflags "-X main.hostOS=$(go env GOHOSTOS) -X main.hostArch=$(go env GOHOSTARCH)" $*
- 输出:
$ env GOARCH=386 ./build.sh
$ ./tmp
runtime values: linux 386
build time values: linux amd64
答案 1 :(得分:0)
$GOHOSTOS
和$GOHOSTARCH
(分别为GOOS
和GOARCH
提供默认值)并且不影响运行时的执行系统
GOOS
和GOARCH
在编译时记录,并由常量runtime.GOOS
和runtime.GOARCH
提供。
您可能想要检查这些常量。