Go
Développement pour plusieurs plates-formes avec compilation conditionnelle
Recherche…
Introduction
La compilation conditionnelle basée sur une plate-forme se présente sous deux formes dans Go, l'une avec les suffixes de fichier et l'autre avec les balises de génération.
Syntaxe
- Après "
// +build
", une seule plate-forme ou une liste peut suivre - La plate-forme peut être inversée en la précédant par
!
signe - La liste des plates-formes séparées par un espace est ORed ensemble
Remarques
Mises en garde pour les balises de construction:
- La contrainte de
// +build
doit être placée en haut du fichier, même avant la clause de package. - Il doit être suivi par une ligne vide pour séparer les commentaires du package.
Liste des plates-formes valides pour les balises de construction et les suffixes de fichiers |
---|
Android |
Darwin |
libellule |
freebsd |
linux |
netbsd |
openbsd |
plan9 |
Solaris |
les fenêtres |
Reportez-vous à la liste $GOOS
dans https://golang.org/doc/install/source#environment pour obtenir la liste des plates-formes la plus récente.
Construire des balises
// +build linux
package lib
var OnlyAccessibleInLinux int // Will only be compiled in Linux
Annulez une plate-forme en la plaçant !
avant cela:
// +build !windows
package lib
var NotWindows int // Will be compiled in all platforms but not Windows
La liste des plates-formes peut être spécifiée en les séparant par des espaces
// +build linux darwin plan9
package lib
var SomeUnix int // Will be compiled in linux, darwin and plan9 but not on others
Suffixe de fichier
Si vous nommez votre fichier lib_linux.go
, tout le contenu de ce fichier ne sera compilé que dans des environnements Linux:
package lib
var OnlyCompiledInLinux string
Définir des comportements distincts sur différentes plates-formes
Différentes plates-formes peuvent avoir des implémentations distinctes de la même méthode. Cet exemple montre également comment les balises de construction et les suffixes de fichiers peuvent être utilisés ensemble.
Fichier 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")
}