Поиск…


Синтаксис

  • // + строить теги

замечания

Теги сборки используются для условного создания определенных файлов в коде. Теги сборки могут игнорировать файлы, которые вы не хотите создавать, если они явно не включены, или некоторые предопределенные теги сборки могут использоваться для создания файла только на определенной архитектуре или операционной системе.

Теги сборки могут отображаться в любом виде исходного файла (а не только на 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 в стандартной библиотеке):

// +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