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")
}


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow