Suche…


Syntax

  • // + Tags erstellen

Bemerkungen

Build-Tags werden verwendet, um bestimmte Dateien in Ihrem Code bedingt zu erstellen. Build-Tags ignorieren möglicherweise Dateien, die nicht erstellt werden sollen, es sei denn, sie werden explizit einbezogen, oder es werden einige vordefinierte Build-Tags verwendet, damit eine Datei nur auf einer bestimmten Architektur oder einem bestimmten Betriebssystem erstellt wird.

Build-Tags können in jeder Art von Quelldatei (nicht nur in Go) angezeigt werden, sie müssen jedoch am oberen Rand der Datei angezeigt werden und dürfen nur Leerzeilen und andere Zeilenkommentare enthalten. Diese Regeln bedeuten, dass in Go-Dateien vor der Paketklausel eine Buildeinschränkung angezeigt werden muss.

Auf eine Reihe von Build-Tags muss eine Leerzeile folgen.

Separate Integrationstests

Build-Einschränkungen werden normalerweise verwendet, um normale Unit-Tests von Integrationstests zu trennen, für die externe Ressourcen erforderlich sind, beispielsweise eine Datenbank oder ein Netzwerkzugriff. Fügen Sie dazu eine benutzerdefinierte Buildeinschränkung oben in der Testdatei hinzu:

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

Die Testdatei wird nicht in die ausführbare Builddatei kompiliert, wenn der folgende Aufruf von go test verwendet wird:

go test -tags "integration"

Ergebnisse:

$ 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

Optimieren Sie Implementierungen basierend auf Architektur

Wir können eine einfache xor-Funktion nur für Architekturen optimieren, die nicht ausgerichtetes Lesen / Schreiben unterstützen, indem Sie zwei Dateien erstellen, die die Funktion definieren und ihnen eine Build-Einschränkung voranstellen (ein Beispiel für den hier außerhalb des Gültigkeitsbereichs befindlichen xor-Code finden Sie unter crypto/cipher/xor.go in der Standardbibliothek):

// +build 386 amd64 s390x

package cipher

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

und für andere Architekturen:

// +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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow