Ответ
Файл go.sum — это автоматически генерируемый файл, который обеспечивает целостность и воспроизводимость зависимостей в Go-проекте. Он содержит криптографические хеш-суммы для каждой версии каждого модуля, от которого зависит проект.
Ключевые назначения go.sum:
-
Верификация целостности (Integrity Verification): При сборке проекта Go использует хеши из
go.sumдля проверки того, что загруженные из интернета модули не были изменены или подменены. Это защищает от атак на цепочку поставок (supply-chain attacks). -
Воспроизводимость сборок (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, чтобы обеспечить консистентность для всей команды и сборочных процессов.
Ответ 18+ 🔞
А, слушай, вот этот ваш go.sum, блядь... Ну, это такая, понимаешь, бумажка-контролёрша, которую Го сам себе генерирует, чтобы потом не охуеть от неожиданностей.
Зачем он, эта тварь, нужен:
-
Чтобы тебя не наебали. Представь: качаешь ты библиотеку свежую, а там какой-то пидарас шерстяной поселился и свой код подсунул. Так вот
go.sumхранит криптографические отпечатки пальцев для каждой версии модуля. Го при сборке сверяет: ага, хеш совпал — значит, это легитимный чувак, а не манда с ушами. Защита от подмены, короче. -
Чтобы у всех был один и тот же пиздец. Без этого файла у тебя на компе одна версия библиотеки, у Коли на работе — другая, а на сервере — третья, и все они охуенно по-разному глючат.
go.sumгарантирует, что везде, абсолютно везде, будут использоваться точно такие же байты зависимостей. Воспроизводимость, ёпта!
Чем он не go.mod?
go.mod— это как список пожеланий: «хочу такую-то версию или новее».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 обязательно надо пихать в Гитину вместе с go.mod. Если не закоммитишь — у всей команды волнение ебать начнётся, потому что у каждого будет своя, особенная, ебаная версия зависимостей. Не будь мудаком, как тот Герасим, — коммить оба файла.