サーチ…


前書き

プラットフォームベースの条件付きコンパイルでは、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