Sök…


Syntax

  • // + bygg taggar

Anmärkningar

Build-taggar används för att villkorligt bygga vissa filer i din kod. Build-taggar kan ignorera filer som du inte vill bygga såvida de inte uttryckligen ingår, eller vissa fördefinierade build-taggar kan användas för att en fil bara ska byggas på en viss arkitektur eller operativsystem.

Build-taggar kan visas i alla typer av källfiler (inte bara Go), men de måste visas nära toppen av filen, endast föregående av tomma rader och andra radkommentarer. Dessa regler innebär att i Go-filer måste en build-begränsning visas före paketklausulen.

En serie byggtaggar måste följas av en tom rad.

Separata integrationstester

Byggbegränsningar används vanligtvis för att separera normala enhetstester från integrationstester som kräver externa resurser, till exempel en databas eller nätverksåtkomst. För att göra detta lägger du till en anpassad build-begränsning högst upp i testfilen:

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

Testfilen kommer inte att kompilera till den körbara builden om inte följande anrop av go test används:

go test -tags "integration"

Resultat:

$ 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

Optimera implementeringar baserade på arkitektur

Vi kan optimera en enkel xor-funktion för endast arkitekturer som stöder ojusterade läsningar / skrivningar genom att skapa två filer som definierar funktionen och prefixerar dem med en build-begränsning (för ett faktiskt exempel på xor-koden som är utanför räckvidden här, se crypto/cipher/xor.go i standardbiblioteket):

// +build 386 amd64 s390x

package cipher

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

och för andra arkitekturer:

// +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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow