Сборка и управление зависимостями в 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/bingo 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 .