Go
Sviluppo per piattaforme multiple con compilazione condizionale
Ricerca…
introduzione
La compilazione condizionale basata su piattaforma è disponibile in due formati in Go, uno con suffissi file e l'altro con tag build.
Sintassi
- Dopo "
// +build
", può seguire una singola piattaforma o un elenco - La piattaforma può essere ripristinata precedendola con
!
cartello - Elenco di piattaforme separate dallo spazio sono ORed insieme
Osservazioni
Avvertenze per i tag di costruzione:
- Il
// +build
constraint deve essere posizionato all'inizio del file, anche prima della clausola del pacchetto. - Deve essere seguito da una riga vuota per separare i commenti del pacchetto.
Elenco di piattaforme valide per entrambi i tag di costruzione e i suffissi dei file |
---|
androide |
Darwin |
libellula |
FreeBSD |
linux |
NetBSD |
openbsd |
plan9 |
solaris |
finestre |
Fare riferimento all'elenco $GOOS
in https://golang.org/doc/install/source#environment per l'elenco delle piattaforme più aggiornato.
Costruisci tag
// +build linux
package lib
var OnlyAccessibleInLinux int // Will only be compiled in Linux
Annulla una piattaforma posizionando !
prima di cio:
// +build !windows
package lib
var NotWindows int // Will be compiled in all platforms but not Windows
L'elenco delle piattaforme può essere specificato separandole con spazi
// +build linux darwin plan9
package lib
var SomeUnix int // Will be compiled in linux, darwin and plan9 but not on others
Suffisso file
Se dai il nome al tuo file lib_linux.go
, tutto il contenuto di quel file sarà compilato solo in ambienti Linux:
package lib
var OnlyCompiledInLinux string
Definire comportamenti separati in piattaforme diverse
Diverse piattaforme possono avere implementazioni separate dello stesso metodo. Questo esempio illustra anche come possono essere utilizzati insieme tag di costruzione e suffissi di file.
File 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")
}