Go
Строить ограничения
Поиск…
Синтаксис
- // + строить теги
замечания
Теги сборки используются для условного создания определенных файлов в коде. Теги сборки могут игнорировать файлы, которые вы не хотите создавать, если они явно не включены, или некоторые предопределенные теги сборки могут использоваться для создания файла только на определенной архитектуре или операционной системе.
Теги сборки могут отображаться в любом виде исходного файла (а не только на 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 */ }