Системы сборки

Сборка и управление зависимостями в Go #

В Go инструменты сборки, управления зависимостями и анализа кода встроены в стандартный CLI (go). Для большинства проектов сторонние системы сборки не требуются. Go Modules

Управление зависимостями в Go осуществляется с помощью модулей - механизм, введённый в Go 1.11 и стабилизированный в Go 1.13.

Основные команды и файлы #

  • go.mod - Описывает модуль: имя, минимальная версия Go, прямые зависимости
  • go.sum - Контрольные суммы загруженных зависимостей (для верификации)
  • go mod init <module> - Инициализирует новый модуль
  • go get <package> - Добавляет или обновляет зависимость
  • go mod tidy - Приводит go.mod и go.sum в актуальное состояние (удаляет неиспользуемые, добавляет недостающие)
  • go mod vendor - Копирует все зависимости в папку vendor/ (опционально, для изоляции)
  • go mod download - Предварительно загружает зависимости (полезно в CI или оффлайне)

Версионирование #

  • Go использует Semantic Versioning (v1.2.3, v2.0.0+incompatible, v0.x.y - unstable).
  • Версии с v0 и v1 импортируются без суффикса в пути: import "github.com/user/pkg" Версии v2+ требуют суффикса в пути модуля: import "github.com/user/pkg/v2"
  • Поддерживается работа с не-модульными (pre-Go-modules) репозиториями - через псевдоварсионирование (v0.0.0-20220101123456-abcdef123456).

Сборка и запуск #

  • go build - Компилирует пакет в исполняемый файл (в текущей директории, имя — по имени папки)
  • go build -o foo . - Собирает с указанием имени выходного бинарника
  • go run . - Компилирует и сразу запускает (удобно для CLI-утилит)
  • go install - Собирает и устанавливает бинарник в $GOBIN или $GOPATH/bin
  • go install example.com/cmd@latest - Устанавливает бинарник из модуля напрямую

Кросс-компиляция #

Go поддерживает сборку под другие ОС/архитектуры без кросс-тулчейнов:

  • GOOS=linux GOARCH=amd64 go build -o app-linux .
  • GOOS=windows GOARCH=amd64 go build -o app.exe .
  • GOOS=darwin GOARCH=arm64 go build -o app-mac .