Go
条件付きコンパイルによる複数プラットフォーム用の開発
サーチ…
前書き
プラットフォームベースの条件付きコンパイルでは、Goに2つの形式があり、1つはファイルの接尾辞付きで、もう1つはビルドタグ付きです。
構文
- "
// +build
"の後、単一のプラットフォームまたはリストが続くことができます - プラットフォームは先行することによって元に戻すことができます
!
符号 - スペースで区切られたプラットフォームのリストは一緒にORされます
備考
ビルドタグの警告:
-
// +build
制約は、ファイルの先頭に置かなければなりません。 - パッケージのコメントと区別するために、1つの空白行を続けなければなりません。
ビルドタグとファイルサフィックスの両方の有効なプラットフォームのリスト |
---|
アンドロイド |
ダーウィン |
トンボ |
フリーズ |
linux |
ネットス |
openbsd |
プラン9 |
ソラリス |
窓 |
最新のプラットフォームリストについては、 https: $GOOS
リストを参照してください。
ビルドタグ
// +build linux
package lib
var OnlyAccessibleInLinux int // Will only be compiled in Linux
配置してプラットフォームを無効にする!
その前に:
// +build !windows
package lib
var NotWindows int // Will be compiled in all platforms but not Windows
プラットフォームのリストはスペースで区切って指定できます
// +build linux darwin plan9
package lib
var SomeUnix int // Will be compiled in linux, darwin and plan9 but not on others
ファイルサフィックス
あなたのファイルにlib_linux.go
という名前をつけた場合、そのファイル内のすべてのコンテンツはlinux環境でのみコンパイルされます:
package lib
var OnlyCompiledInLinux string
異なるプラットフォームで別々の動作を定義する
異なるプラットフォームは、同じメソッドの別々の実装を持つことができます。この例では、ビルドタグとファイルサフィックスを一緒に使用する方法も示しています。
ファイルmain.go
:
package main
import "fmt"
func main() {
fmt.Println("Hello World from Conditional Compilation Doc!")
printDetails()
}
details.go
:
// +build !windows
package main
import "fmt"
func printDetails() {
fmt.Println("Some specific details that cannot be found on Windows")
}
details_windows.go
:
package main
import "fmt"
func printDetails() {
fmt.Println("Windows specific details")
}
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow