2016-06-12 21 views
3

如何在運行時檢測$ GOHOSTOS和$ GOHOSTARCH的值,並且運行二進制文件的任何系統?請注意,即使主機上沒有安裝編譯器,我也希望檢測這些值。

+0

os.Getenv(「 GOHOSTOS「)? –

+0

如果沒有安裝編譯器,GOHOSTOS env變量是否存在? – codefx

+0

'runtime.GOOS'和'runtime.GOARCH' – creker

回答

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

謝謝。這就是我最終做的。 – codefx

0

$GOHOSTOS$GOHOSTARCH(分別爲GOOSGOARCH分別提供服務默認值)用於構建go程序並且不影響運行系統的執行。

GOOSGOARCH在編譯時記錄下來,並且可以通過常量runtime.GOOSruntime.GOARCH獲得。 你可能想檢查這些常量。