これが私が現在使用しているもので、これでうまくいくと思いますが、もっと良い方法があるはずです:
func isWindows() bool {
return os.PathSeparator == '\\' && os.PathListSeparator == ';'
}
ご覧のとおり、私の場合、知る必要があるのはウィンドウを検出する方法だけですが、プラットフォーム/OS を検出する方法を知りたいです。
遊ぶ:
これが私が現在使用しているもので、これでうまくいくと思いますが、もっと良い方法があるはずです:
func isWindows() bool {
return os.PathSeparator == '\\' && os.PathListSeparator == ';'
}
ご覧のとおり、私の場合、知る必要があるのはウィンドウを検出する方法だけですが、プラットフォーム/OS を検出する方法を知りたいです。
遊ぶ:
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
価値があるからです。
ランタイム パッケージを確認しましたか? GOOS const があります: http://golang.org/pkg/runtime/#pkg-constants