Ошибка "missing go.sum entry for module providing package" в Go: причины и решение
Причина ошибки
Ошибка 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
Этот способ особенно актуален, если вы работаете в корпоративной среде с собственными зеркалами модулей.