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
// +buildEinschrä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")
}