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 */ }


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow