Go
Construire des contraintes
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 */ }