Zoeken…


Syntaxis

  • // + tags bouwen

Opmerkingen

Build-tags worden gebruikt voor het voorwaardelijk bouwen van bepaalde bestanden in uw code. Build-tags kunnen bestanden negeren die u niet wilt bouwen, tenzij expliciet opgenomen, of sommige vooraf gedefinieerde build-tags kunnen worden gebruikt om een bestand alleen op een bepaalde architectuur of besturingssysteem te laten bouwen.

Build-tags kunnen in elk type bronbestand verschijnen (niet alleen Go), maar ze moeten boven aan het bestand verschijnen, alleen voorafgegaan door lege regels en andere regelopmerkingen. Deze regels betekenen dat in Go-bestanden een buildbeperking moet verschijnen vóór de pakketclausule.

Een reeks build-tags moet worden gevolgd door een lege regel.

Afzonderlijke integratietests

Build-beperkingen worden meestal gebruikt om normale eenheids-tests te scheiden van integratietests die externe bronnen vereisen, zoals een database of netwerktoegang. Voeg hiervoor een aangepaste buildbeperking toe bovenaan het testbestand:

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

Het testbestand wordt niet gecompileerd in het build-executable tenzij de volgende aanroep van go test wordt gebruikt:

go test -tags "integration"

resultaten:

$ 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

Optimaliseer implementaties op basis van architectuur

We kunnen een eenvoudige xor-functie optimaliseren voor alleen architecturen die niet-uitgelijnd lezen / schrijven ondersteunen door twee bestanden te maken die de functie definiëren en ze te prefixen met een buildbeperking (voor een concreet voorbeeld van de xor-code die hier buiten bereik is, zie crypto/cipher/xor.go in de standaardbibliotheek):

// +build 386 amd64 s390x

package cipher

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

en voor andere architecturen:

// +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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow