Go
Entwickeln für mehrere Plattformen mit bedingtem Kompilieren
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")
}