go mod init

Тема дорожной карты · Golang

Go Modules — официальная система управления зависимостями для Go, введённая в Go 1.11 и ставшая используемой по умолчанию в Go 1.16, заменив прежний рабочий процесс на основе GOPATH. Модуль определяется файлом go.mod в корне репозитория, создаваемым командой go mod init <module-path> (например, go mod init github.com/myorg/myservice); этот файл фиксирует путь модуля, минимально необходимую версию Go (go 1.22) и все прямые зависимости с их минимальными требуемыми версиями. Сопутствующий файл go.sum хранит криптографические контрольные суммы для каждой версии модуля в графе зависимостей, гарантируя, что go build и go test всегда скачивают идентичный исходный код. Распространённые команды для работы с модулями включают go mod tidy (удалить неиспользуемые зависимости), go mod download (предзагрузить локальный кеш для офлайн- или Docker-сборок), go mod vendor (скопировать все зависимости в директорию vendor/) и go mod graph (изучить полный граф зависимостей). Понимание go.mod и алгоритма выбора минимальных версий (MVS), который всегда выбирает минимальную версию, удовлетворяющую всем требованиям, необходимо для управления транзитивными зависимостями в крупных Golang-монорепозиториях.

Как это работает

go mod init использует Go modules (с 1.11) — go mod init, go mod tidy, go mod download, go.mod + go.sum файлы. Module path — префикс импорта; semver enforced; go-команда обрабатывает vendoring (go mod vendor) и проксирование через proxy.golang.org. Тулчейн: go build, go run, go test, go fmt, go vet, go install, go work (multi-module workspaces). Third-party: staticcheck, golangci-lint.

Когда применять

Всегда коммитьте go.sum (верифицирует контрольные суммы модулей). go mod tidy регулярно — держите go.mod минимальным. replace-директива в go.mod — для локальной разработки зависимости. golangci-lint в CI — пакетирует vet, staticcheck, errcheck и десятки полезных линтеров. Для приватных модулей GOPRIVATE=*.yourcompany.ru — обходит публичный прокси.

Типичные ошибки

Ловушки go mod init: pre-1.11 GOPATH-workflow (давно мёртв — кто учит этому, учит устаревшему Go); replace-директивы оставлены в production go.mod (используйте build-time-only override); коммит папки vendor/ без -mod=vendor policy в CI; go install вне модуля (в старом Go ставило в $GOPATH/bin, в новом требует @version).

Связанные понятия

Полезные ресурсы