//go:build и // +buildОбе директивы — это build constraints (ограничения сборки), которые указывают компилятору, при каких условиях включать файл в сборку. Разница в синтаксисе и возрасте.
// +build — старая форма, использовавшаяся до Go 1.17:• Размещается в начале файла, до объявления пакета.
• После блока директив обязательна пустая строка.
• Условия комбинируются неочевидно: пробел означает «И», запятая — «ИЛИ», а несколько строк — тоже «И». Это часто путало.
//go:build — новая форма, введённая в Go 1.17:• Использует привычные логические выражения с
&&, ||, ! и скобками.• Читается гораздо понятнее.
// Старая форма:
// +build linux,amd64 darwin
// Новая форма:
//go:build (linux && amd64) || darwin
Начиная с Go 1.17, инструмент
gofmt автоматически добавляет //go:build рядом со старыми // +build, синхронизируя их. Сегодня рекомендуется использовать именно //go:build, а старую форму оставляют лишь для совместимости со совсем древними версиями Go.🐸 Библиотека Go для собеса