私が現在使用している方法はこれで十分だと思いますが、もっと良い方法があるはずです。
func isWindows() bool {
return os.PathSeparator == '\\' && os.PathListSeparator == ';'
}
ご覧のとおり、私の場合、知っておく必要があるのはウィンドウを検出する方法だけですが、任意のプラットフォーム/ OS を検出する方法も知りたいです。
遊ぶ:
ベストアンサー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
値を持つためです。