Ответ
Go-модули (Go Modules) — это современная система управления зависимостями в языке Go, представленная в версии 1.11 и ставшая стандартом. Она позволяет управлять версиями библиотек проекта и обеспечивает воспроизводимые сборки.
Ключевые компоненты:
go.mod
— файл-манифест в корне проекта. Он определяет:module
: Уникальный путь модуля (например,github.com/user/project
).go
: Версию языка Go, под которую написан код.require
: Список прямых зависимостей проекта с их версиями.
go.sum
— автоматически генерируемый файл, содержащий контрольные суммы (хеши) всех зависимостей (прямых и транзитивных). Это гарантирует, что при каждой сборке используются в точности те же версии пакетов, защищая от их случайного или злонамеренного изменения.
Основные преимущества:
- Версионирование: Явное управление версиями с поддержкой семантического версионирования (SemVer).
- Воспроизводимость сборок: Благодаря
go.sum
сборка проекта не зависит от внешних изменений в репозиториях зависимостей. - Работа вне
GOPATH
: Проекты могут располагаться в любой директории файловой системы.
Пример go.mod
:
module example.com/mymodule
go 1.21
require (
github.com/pkg/errors v0.9.1
golang.org/x/sync v0.3.0
)
Основные команды:
go mod init [module-path]
— инициализирует новый модуль, создаваяgo.mod
.go mod tidy
— синхронизирует зависимости: удаляет неиспользуемые и добавляет недостающие вgo.mod
.go get [package@version]
— добавляет или обновляет конкретную зависимость.