Go
Bouw beperkingen
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 */ }