Вопрос с собеседования · Go

Как устроены модули Go — go.mod, go.sum, версии?

JuniorМодули, тесты и инструменты
Ещё спрашивают так:
  • Что делает go mod tidy?
Коротко

go.mod объявляет путь модуля, версию Go и зависимости с версиями (семантическое версионирование). go.sum хранит хеши — гарантия, что скачан тот же код. Версии выбирает MVS (minimal version selection): берётся минимальная версия, удовлетворяющая всем требованиям, — сборки воспроизводимы без lock-файла.

  • go mod tidy — добавить нужные и убрать лишние зависимости
  • Мажорная версия ≥ 2 — в пути импорта: example.com/lib/v2
  • replace — подменить модуль локальной копией при разработке

А ещё GOPROXY кэширует модули; GOPRIVATE — для приватных репозиториев

Подробно

module github.com/acme/orders

go 1.23

require (
    github.com/jackc/pgx/v5 v5.6.0
    golang.org/x/sync v0.8.0
)

MVS отличается от npm и pip: инструмент не берёт «самую свежую подходящую», а минимальную, которую явно потребовал кто-то из графа. Обновление — осознанное: go get pkg@latest.

Импорт по версии мажора: несовместимая v2 — другой путь импорта, и обе версии могут сосуществовать в одной сборке.

Вендоринг: go mod vendor кладёт зависимости в репозиторий — для сборок без сети.

Структура проекта: internal/ — пакеты, недоступные снаружи модуля; cmd/<name>/ — точки входа бинарников.

Что хотят услышать

  • Назначение go.mod и go.sum.
  • MVS и воспроизводимость.
  • Мажорные версии в пути.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗go.sum можно не коммитить
  • ✗Go всегда берёт последнюю версию зависимости
  • ✓go.mod — модуль и зависимости, go.sum — хеши; MVS
  • ✗go mod tidy обновляет все зависимости до последних доступных версий

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования