수색…


통사론

  • // + 빌드 태그

비고

빌드 태그는 코드에서 특정 파일을 조건부로 빌드하는 데 사용됩니다. 빌드 태그는 명시 적으로 포함되지 않는 한 빌드하지 않으려는 파일을 무시하거나 미리 정의 된 빌드 태그를 사용하여 특정 아키텍처 나 운영 체제에서만 파일을 빌드하도록 할 수 있습니다.

빌드 태그는 모든 종류의 소스 파일 (Go가 아님)에 나타날 수 있지만, 파일의 맨 위에 표시되어야하며 공백 행 및 기타 행 주석 앞에옵니다. 이 규칙은 Go 파일에서 빌드 제한이 패키지 절 앞에 나타나야 함을 의미합니다.

일련의 빌드 태그 뒤에 공백 행이 와야합니다.

별도의 통합 테스트

빌드 제약 조건은 일반적으로 데이터베이스 또는 네트워크 액세스와 같은 외부 리소스가 필요한 통합 테스트와 일반 단위 테스트를 분리하는 데 사용됩니다. 이렇게하려면 테스트 파일 맨 위에 사용자 정의 빌드 제한 조건을 추가하십시오.

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

다음 go test 호출을 사용하지 않는 한 테스트 파일은 빌드 실행 파일로 컴파일되지 않습니다.

go test -tags "integration"

결과 :

$ 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

아키텍처를 기반으로 구현 최적화

함수를 정의하는 두 개의 파일을 만들고 빌드 제약 조건을 접두어로 사용하여 정렬되지 않은 읽기 / 쓰기를 지원하는 아키텍처에 대해서만 간단한 xor 함수를 최적화 할 수 있습니다 (여기서 범위를 벗어난 xor 코드의 실제 예는 crypto/cipher/xor.go 표준 라이브러리에서 crypto/cipher/xor.go ) :

// +build 386 amd64 s390x

package cipher

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

다른 아키텍처의 경우 :

// +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
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow