Модули Go: версии и зависимости
Вопрос
Объясните, как работают модули Go: go.mod, go.sum, выбор версий, мажорные версии, приватные зависимости, обновление.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
go.mod: путь модуля, директива go и toolchain, require, replace, exclude
MVS: максимум из минимальных требований, воспроизводимость без lock-файла
go.sum и sum.golang.org для проверки целостности, GOPROXY
v2+ в пути импорта, правило импортной совместимости
Приватные модули: GOPRIVATE, GONOSUMDB, доступ по токену
Обновление: go get -u, go list -m -u all, govulncheck; go.work для монорепо
Что могут спросить следом
- Что делает директива toolchain?
- Как временно подключить форк зависимости?
Разбор
Модуль описывается go.mod: путь модуля, директива go (минимальная версия языка, от неё зависит, например, семантика переменной цикла), toolchain (какую версию тулчейна предпочесть, с Go 1.21 go скачает её сам), require с версиями зависимостей, replace для подмены и exclude. Версии выбираются по MVS: каждое требование означает «не ниже», и берётся максимум по графу, поэтому без lock-файла сборка воспроизводима, а новые версии сами не приезжают. go.sum хранит хеши, а при первом скачивании они сверяются с sum.golang.org. Модули качаются через GOPROXY, по умолчанию proxy.golang.org. Несовместимые версии с v2 имеют суффикс в пути, и v1 с v2 могут жить в одной сборке. Приватные модули: GOPRIVATE=gitlab.company.ru/*, тогда go идёт напрямую в git и не проверяет хеши в публичной базе, доступ через .netrc или токен. Обновляю go get -u ./... или точечно, смотрю go list -m -u all, проверяю уязвимости govulncheck. Форк подключаю через replace. Несколько модулей в одном репо удобно связывать через go.work.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Тесты, бенчмарки и модули»
- Minimal version selection как в Go modules
- Упрощённый go mod tidy: лишние и недостающие модули
- Сортировка версий по Semantic Versioning на Go
- Что выведет Go: табличный прогон без testing
- testing.B.Loop в Go 1.24
- Что показывает -benchmem
- t.Errorf и t.Fatalf
- Команда запуска тестов с детектором гонок