Go
Utveckling för flera plattformar med villkorlig sammanställning
Sök…
Introduktion
Plattformsbaserad villkorlig kompilering finns i två former i Go, en är med filsuffix och den andra är med build taggar.
Syntax
- Efter "
// +build
" kan en plattform eller en lista följa - Plattformen kan återställas genom att föregås av den
!
tecken - Lista med utrymme-separerade plattformar ORSeras tillsammans
Anmärkningar
Varningar för att bygga taggar:
-
// +build
begränsningen måste placeras högst upp i filen, även före paketklausul. - Det måste följas av en tom rad för att separera från paketkommentarer.
Lista över giltiga plattformar för både build-taggar och filsuffix |
---|
android |
darwin |
trollslända |
freebsd |
linux |
NetBSD |
openbsd |
plan9 |
solaris |
fönster |
Se listan över $GOOS
i https://golang.org/doc/install/source#en $GOOS
för den mest uppdaterade plattformslistan.
Bygg taggar
// +build linux
package lib
var OnlyAccessibleInLinux int // Will only be compiled in Linux
Negera en plattform genom att placera !
före det:
// +build !windows
package lib
var NotWindows int // Will be compiled in all platforms but not Windows
Lista över plattformar kan specificeras genom att separera dem med mellanslag
// +build linux darwin plan9
package lib
var SomeUnix int // Will be compiled in linux, darwin and plan9 but not on others
File suffix
Om du lib_linux.go
din fil lib_linux.go
kommer allt innehåll i den filen endast att kompileras i linuxmiljöer:
package lib
var OnlyCompiledInLinux string
Definiera separata beteenden på olika plattformar
Olika plattformar kan ha separata implementationer av samma metod. Detta exempel illustrerar också hur build-taggar och filsuffix kan användas tillsammans.
Fil 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow