Avatar ·

Ошибка "missing go.sum entry for module providing package" в Go: причины и решение

Всем привет! Я новичок в Go и активно изучаю модули. Переписываю старый проект на Buffalo и столкнулся с ошибкой, которую не могу понять. У меня есть структура проекта: ``` myapp/ ├── go.mod ├── go.sum ├── main.go └── actions/ └── app.go ``` В `go.mod` указаны зависимости: ``` module myapp go 1.21 require ( github.com/gobuffalo/buffalo v0.18.4 github.com/gorilla/mux v1.8.0 ) ``` В `main.go` я импортирую: ```go package main import ( "github.com/gobuffalo/buffalo" "github.com/gorilla/mux" ) ``` Но когда запускаю `go build`, получаю ошибку: ``` missing go.sum entry for module providing package github.com/gorilla/mux ``` Я пробовал: 1. `go mod tidy` — не помогло. 2. Удалял `go.sum` и запускал `go mod download` — ошибка осталась. 3. Проверил, что модули установлены в `$GOPATH/pkg/mod`. В чём может быть проблема? Я что-то упускаю в настройках модулей? Заранее спасибо! P.S. Использую Go 1.21 на Ubuntu 22.04. <<>>

Причина ошибки

Ошибка missing go.sum entry for module providing package возникает, когда Go не может найти в файле go.sum хеш-сумму для конкретного модуля, который требуется вашей программе. Это механизм безопасности: Go проверяет, что загруженные модули не были изменены или подменены. Чаще всего проблема связана с несоответствием между версиями модулей в go.mod и фактически загруженными модулями, либо с некорректным кэшем модулей.

Пошаговое решение

Вот проверенный алгоритм для исправления этой ошибки:

1. Очистите кэш модулей

Иногда в кэше остаются повреждённые или неполные данные. Выполните:

go clean -modcache

Это удалит все загруженные модули из $GOPATH/pkg/mod.

2. Обновите go.mod и go.sum

Самое надёжное решение — пересоздать оба файла с нуля:

# Удаляем старые файлы
rm go.mod go.sum

# Инициализируем модуль заново
go mod init myapp

# Добавляем все недостающие зависимости
go mod tidy

Команда go mod tidy автоматически проанализирует ваш код, добавит недостающие модули в go.mod, удалит неиспользуемые и сгенерирует правильный go.sum.

3. Если не помогло — проверьте косвенные зависимости

Иногда проблема кроется в том, что модуль github.com/gorilla/mux не указан как прямая зависимость, а требуется через другой модуль (например, сам Buffalo может использовать mux). В таких случаях попробуйте:

go mod tidy -e

Флаг -e игнорирует ошибки загрузки модулей и позволяет завершить процесс.

4. Альтернативный метод — ручное добавление

Если вы точно знаете, какая версия модуля нужна, можно добавить её вручную:

go get github.com/gorilla/mux@v1.8.0

Эта команда обновит go.mod и go.sum для указанной версии.

Проверка результата

После выполнения этих шагов проверьте, что файл go.sum содержит записи для всех модулей из go.mod:

cat go.sum | grep gorilla

Должна появиться строка вида:

github.com/gorilla/mux v1.8.0 h1:... + ...

Профилактика

  • Всегда используйте go mod tidy после изменения импортов.
  • Не редактируйте go.sum вручную — это может нарушить проверку целостности.
  • Храните go.sum в системе контроля версий (Git).
  • При работе в команде синхронизируйте версии Go у всех участников.

После этих действий ошибка должна исчезнуть. Если нет — проверьте, не блокирует ли доступ к репозиториям корпоративный прокси или VPN.

<<>>

Дополнительный способ: проверка GOPROXY и приватных репозиториев

Иногда ошибка missing go.sum entry возникает из-за проблем с прокси для модулей. Если вы используете приватные репозитории или корпоративный прокси, попробуйте:

# Временно отключить прокси
export GOPROXY=off
go mod tidy

# Или указать прямой доступ
export GOPROXY=direct
go mod tidy

Также проверьте переменные окружения:

go env GOPATH GOMODCACHE GOPROXY

Убедитесь, что GOPROXY не указывает на несуществующий или заблокированный сервер. По умолчанию должно быть https://proxy.golang.org,direct.

Если вы используете модули из приватного репозитория (например, GitLab), добавьте его в GONOSUMDB и GONOSUMCHECK:

export GONOSUMDB=*.mycompany.com
export GONOSUMCHECK=*.mycompany.com
go mod tidy

Этот способ особенно актуален, если вы работаете в корпоративной среде с собственными зеркалами модулей.