Go
Kompiluj ograniczenia
Szukaj…
Składnia
- // + tagi kompilacji
Uwagi
Tagi budowania służą do warunkowego budowania niektórych plików w kodzie. Znaczniki kompilacji mogą ignorować pliki, których nie chcesz budować, chyba że zostaną one wyraźnie dołączone lub niektóre predefiniowane znaczniki kompilacji mogą być używane do tworzenia pliku tylko w określonej architekturze lub systemie operacyjnym.
Znaczniki kompilacji mogą pojawiać się w dowolnym pliku źródłowym (nie tylko Go), ale muszą znajdować się w górnej części pliku, poprzedzone tylko pustymi liniami i innymi komentarzami linii. Reguły te oznaczają, że w plikach Go przed klauzulą pakiet musi pojawić się ograniczenie kompilacji.
Po serii tagów kompilacji musi następować pusty wiersz.
Oddzielne testy integracyjne
Ograniczenia kompilacji są powszechnie stosowane do oddzielania normalnych testów jednostkowych od testów integracyjnych wymagających zasobów zewnętrznych, takich jak baza danych lub dostęp do sieci. Aby to zrobić, dodaj niestandardowe ograniczenie kompilacji na górze pliku testowego:
// +build integration
package main
import (
"testing"
)
func TestThatRequiresNetworkAccess(t *testing.T) {
t.Fatal("It failed!")
}
Plik testowy nie zostanie skompilowany do pliku wykonywalnego kompilacji, chyba że zostanie użyte następujące wywołanie go test
go:
go test -tags "integration"
Wyniki:
$ 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
Zoptymalizuj wdrożenia w oparciu o architekturę
Możemy zoptymalizować prostą funkcję xor tylko dla architektur obsługujących niezaangażowane odczyty / zapisy, tworząc dwa pliki, które definiują funkcję i poprzedzają je ograniczeniem kompilacji (rzeczywisty przykład kodu xor, który jest poza zakresem, patrz crypto/cipher/xor.go
w standardowej bibliotece):
// +build 386 amd64 s390x
package cipher
func xorBytes(dst, a, b []byte) int { /* This function uses unaligned reads / writes to optimize the operation */ }
a dla innych architektur:
// +build !386,!amd64,!s390x
package cipher
func xorBytes(dst, a, b []byte) int { /* This version of the function just loops and xors */ }