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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow