如何在运行时检测$ GOHOSTOS和$ GOHOSTARCH?

时间:2016-06-12 15:19:12

标签: go

如何在运行二进制文件的任何系统上检测$ GOHOSTOS和$ GOHOSTARCH的值?请注意,即使主机上没有安装编译器,我也想检测这些值。

2 个答案:

答案 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)

在构建go程序时使用

$GOHOSTOS$GOHOSTARCH(分别为GOOSGOARCH提供默认值)并且不影响运行时的执行系统

GOOSGOARCH在编译时记录,并由常量runtime.GOOSruntime.GOARCH提供。 您可能想要检查这些常量。