Go
Costruisci vincoli
Ricerca…
Sintassi
- // + crea tag
Osservazioni
I tag di costruzione vengono utilizzati per creare condizionatamente determinati file nel codice. I tag di compilazione possono ignorare i file che non si desidera creare a meno che non siano esplicitamente inclusi, oppure possono essere utilizzati alcuni tag predefiniti per costruire un file solo su una particolare architettura o sistema operativo.
I tag di compilazione possono apparire in qualsiasi tipo di file sorgente (non solo Go), ma devono apparire nella parte superiore del file, preceduti solo da righe vuote e altri commenti di riga. Queste regole significano che nei file Go deve apparire un vincolo di build prima della clausola del pacchetto.
Una serie di tag build deve essere seguita da una riga vuota.
Test di integrazione separati
I vincoli di costruzione sono comunemente usati per separare i normali test unitari dai test di integrazione che richiedono risorse esterne, come un database o un accesso di rete. Per fare ciò, aggiungi un vincolo di build personalizzato nella parte superiore del file di test:
// +build integration
package main
import (
"testing"
)
func TestThatRequiresNetworkAccess(t *testing.T) {
t.Fatal("It failed!")
}
Il file di test non verrà compilato nell'eseguibile di build a meno che non venga utilizzata la seguente chiamata di go test
:
go test -tags "integration"
risultati:
$ 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
Ottimizza le implementazioni basate sull'architettura
Possiamo ottimizzare una semplice funzione xor solo per le architetture che supportano le letture / scritture non allineate creando due file che definiscono la funzione e prefiggendoli con un vincolo di build (per un esempio reale del codice xor che è fuori ambito qui, vedi crypto/cipher/xor.go
nella libreria standard):
// +build 386 amd64 s390x
package cipher
func xorBytes(dst, a, b []byte) int { /* This function uses unaligned reads / writes to optimize the operation */ }
e per altre architetture:
// +build !386,!amd64,!s390x
package cipher
func xorBytes(dst, a, b []byte) int { /* This version of the function just loops and xors */ }