2016-06-12 2 views
3

goバイナリが実行されているシステムで、実行時に$ GOHOSTOSと$ GOHOSTARCHの値を検出するにはどうすればよいですか?コンパイラのインストールがホストにない場合でも、これらの値を検出したいと考えています。

+0

os.Getenv( " GOHOSTOS ")? –

+0

GOHOSTOS env変数は、コンパイラのインストールがない場合には存在しますか? – codefx

+0

'runtime.GOOS'と' runtime.GOARCH' – creker

答えて

1

ショートバージョンはできません。

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)" $* 
: - main.go

ロングバージョン、あなたは例えば、あなたのコード内の情報を埋め込むビルドスクリプトを作成することができます

- 出力:

$ env GOARCH=386 ./build.sh 
$ ./tmp 
runtime values: linux 386 
build time values: linux amd64 
+1

ありがとうございました。それが私のやり方です。 – codefx

0

$GOHOSTOS$GOHOSTARCH(それぞれGOOSGOARCHのデフォルト値を提供)、外出先プログラムの構築時に使用され、ランタイムシステムの実行に影響を与えません。

GOOSおよびGOARCHは、コンパイル時に記録され、定数runtime.GOOSおよびruntime.GOARCHによって利用可能になります。 これらの定数を確認することができます。

関連する問題