Модули и инструменты

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

Go Modules и тулинг — официальная система управления зависимостями и сборки, введённая в Go 1.11, заменившая прежний рабочий процесс на основе GOPATH на файлы go.mod и go.sum для каждого проекта, фиксирующие каждую прямую и транзитивную зависимость по пути модуля и версии. Команда go mod tidy удаляет неиспользуемые записи и добавляет недостающие, go mod download предзагружает кеш модулей для воспроизводимых Docker-сборок, а go mod vendor копирует все зависимости в директорию vendor/ для изолированных сред. Go Modules и тулинг также охватывают go build, go test, go vet, go generate и go install, которые вместе образуют полный рабочий процесс от написания Golang-кода до поставки статически скомпонованного бинарника в distroless-контейнер. Сторонние линтеры вроде golangci-lint интегрируются с системой модулей и выполняют проверки staticcheck, errcheck и gosec за один проход, становясь незаменимыми в CI/CD-пайплайнах для Kubernetes-развёртываний. Освоение Go Modules и тулинга — обязательное условие для каждого профессионального Golang-разработчика, поскольку это управляет разрешением зависимостей, созданием бинарников и валидацией кода перед выходом в продакшен.

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

Модули и инструменты использует 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 — обходит публичный прокси.

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

Ловушки Модули и инструменты: 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).

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

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