Каково назначение файла go.sum в Go-проекте?

Ответ

Файл go.sum — это автоматически генерируемый файл, который обеспечивает целостность и воспроизводимость зависимостей в Go-проекте. Он содержит криптографические хеш-суммы для каждой версии каждого модуля, от которого зависит проект.

Ключевые назначения go.sum:


  1. Верификация целостности (Integrity Verification): При сборке проекта Go использует хеши из go.sum для проверки того, что загруженные из интернета модули не были изменены или подменены. Это защищает от атак на цепочку поставок (supply-chain attacks).



  2. Воспроизводимость сборок (Build Reproducibility): go.sum гарантирует, что все разработчики в команде, а также CI/CD-системы, используют абсолютно идентичный код зависимостей. Это предотвращает ошибки вида «у меня работает, а у тебя нет».


Отличие от go.mod:

  • go.mod определяет требования к версиям зависимостей (например, github.com/gin-gonic/gin v1.7.0 или новее).
  • go.sum фиксирует факт использования конкретной версии, записывая её точную хеш-сумму.

Пример строки в go.sum:

github.com/example/module v1.2.3 h1:abCdEfGh...
github.com/example/module v1.2.3/go.mod h1:ijKlMnOp...

Здесь h1: означает, что используется хеш-алгоритм SHA-256.

Важно: Файл go.sum необходимо коммитить в систему контроля версий (Git) вместе с go.mod, чтобы обеспечить консистентность для всей команды и сборочных процессов.