Recherche…


Syntaxe

  • // + construire des balises

Remarques

Les balises de construction sont utilisées pour construire de manière conditionnelle certains fichiers dans votre code. Les balises de génération peuvent ignorer les fichiers que vous ne voulez pas construire, sauf si elles sont explicitement incluses, ou certaines balises de génération prédéfinies peuvent être utilisées pour qu'un fichier ne soit construit que sur une architecture ou un système d'exploitation particulier.

Les balises de génération peuvent apparaître dans n'importe quel type de fichier source (pas seulement dans Go), mais elles doivent apparaître en haut du fichier, précédées uniquement de lignes vierges et d'autres commentaires de ligne. Ces règles signifient que, dans les fichiers Go, une contrainte de génération doit apparaître avant la clause du package.

Une série de balises de construction doit être suivie d'une ligne vide.

Tests d'intégration séparés

Les contraintes de construction sont généralement utilisées pour séparer les tests unitaires normaux des tests d'intégration nécessitant des ressources externes, telles qu'une base de données ou un accès réseau. Pour ce faire, ajoutez une contrainte de génération personnalisée en haut du fichier de test:

// +build integration
 
package main
 
import (
    "testing"
)
 
func TestThatRequiresNetworkAccess(t *testing.T) {
    t.Fatal("It failed!")
}

Le fichier de test ne sera pas compilé dans le fichier exécutable à moins que le go test appel suivant go test soit utilisé:

go test -tags "integration"

Résultats:

$ go test
?       bitbucket.org/yourname/yourproject    [no test files]
$ go test -tags "integration"
--- FAIL: TestThatRequiresNetworkAccess (0.00s)
        main_test.go:10: It failed!
FAIL
exit status 1
FAIL    bitbucket.org/yourname/yourproject    0.003s

Optimiser les implémentations basées sur l'architecture

Nous pouvons optimiser une fonction xor simple pour les architectures qui prennent en charge les lectures / écritures non alignées en créant deux fichiers qui définissent la fonction et les préfixent avec une contrainte de construction (pour un exemple réel du code xor qui est hors de portée ici, voir crypto/cipher/xor.go dans la bibliothèque standard):

// +build 386 amd64 s390x

package cipher

func xorBytes(dst, a, b []byte) int { /* This function uses unaligned reads / writes to optimize the operation */ }

et pour d'autres architectures:

// +build !386,!amd64,!s390x

package cipher

func xorBytes(dst, a, b []byte) int { /* This version of the function just loops and xors */ }


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