GoでOS/プラットフォームを確実に検出する方法 質問する

GoでOS/プラットフォームを確実に検出する方法 質問する

私が現在使用している方法はこれで十分だと思いますが、もっと良い方法があるはずです。

func isWindows() bool {
    return os.PathSeparator == '\\' && os.PathListSeparator == ';'
}

ご覧のとおり、私の場合、知っておく必要があるのはウィンドウを検出する方法だけですが、任意のプラットフォーム/ OS を検出する方法も知りたいです。

遊ぶ:

http://play.golang.org/p/r4lYWDJDxL

ベストアンサー1

コンパイル時の検出

OSに応じて異なる実装を行う場合は、その機能の実装を別々のファイルで用意し、各ファイルにビルドタグを追加する方が便利です。これは標準ライブラリの多くの場所で使用されています。たとえば、osパッケージ内

これらのいわゆる「ビルド制約」または「ビルドタグ」について説明します。ここ

定数がありPATH_SEPARATOR、それをプラットフォーム依存にしたい場合は、Windows 用と (UNIX) 残りの 2 つのファイルを作成します。

/project/path_windows.go
/project/path_unix.go

これらのファイルのコードは次のようになります。

path_windows.go

// +build windows

package project

const PATH_SEPARATOR = '\\'

path_unix.go

// +build !windows

package project

const PATH_SEPARATOR = '/'

PATH_SEPARATORコード内でアクセスし、プラットフォームに依存させることができます。

実行時の検出

実行時にオペレーティングシステムを判別したい場合は、runtime.GOOS変数:

if runtime.GOOS == "windows" {
    fmt.Println("Hello from Windows")
}

これはランタイムにコンパイルされるため、環境は無視されますが、それでも値が正しいことはほぼ確実です。その理由は、区別する価値のあるすべてのプラットフォームは、実行可能形式が異なるため再構築する必要があり、新しいGOOS値を持つためです。

おすすめ記事