Suche…


Einführung

Das plattformbasierte bedingte Kompilieren gibt es in Go in zwei Formen, eines mit Dateiendungen und das andere mit Build-Tags.

Syntax

  • Nach " // +build " kann eine einzelne Plattform oder eine Liste folgen
  • Plattform kann zurückgestellt werden, indem Sie mit ! Zeichen
  • Liste der durch Leerzeichen getrennten Plattformen werden ODER-verknüpft

Bemerkungen

Vorsichtsmaßnahmen für Build-Tags:

  • Die // +build Einschränkung muss vor der Paketklausel oben in der Datei stehen.
  • Es muss eine Leerzeile folgen, um sich von den Paketkommentaren zu trennen.
Liste der gültigen Plattformen für Build-Tags und Dateisuffixe
Android
Darwin
Libelle
Freebsd
Linux
netbsd
openbsd
plan9
Solaris
Fenster

Die aktuellste Plattformliste finden Sie in der $GOOS Liste unter https://golang.org/doc/install/source#environment .

Tags erstellen

// +build linux

package lib

var OnlyAccessibleInLinux int // Will only be compiled in Linux

Negiere eine Plattform durch Platzieren ! bevor:

// +build !windows

package lib

var NotWindows int // Will be compiled in all platforms but not Windows

Die Liste der Plattformen kann angegeben werden, indem sie durch Leerzeichen getrennt werden

// +build linux darwin plan9

package lib

var SomeUnix int // Will be compiled in linux, darwin and plan9 but not on others

Dateiendung

Wenn Sie Ihre Datei lib_linux.go , wird der gesamte Inhalt dieser Datei nur in Linux-Umgebungen kompiliert:

package lib

var OnlyCompiledInLinux string

Definieren separater Verhaltensweisen auf verschiedenen Plattformen

Verschiedene Plattformen können separate Implementierungen derselben Methode haben. Dieses Beispiel zeigt auch, wie Build-Tags und Dateisuffixe zusammen verwendet werden können.

Datei 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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow