854просмотров
31.5%от подписчиков
10 марта 2026 г.
provocationScore: 939
📦 go mod: Хватит удалять go.sum, когда что-то сломалось Управление зависимостями в Go выглядит элегантно: написал import, сделал go mod tidy, и всё работает. Но стоит случиться конфликту версий, как многие разработчики переходят в режим паники: удаляют go.mod, удаляют go.sum, чистят кэш и надеются на чудо. Давайте разберем, как это работает под капотом, чтобы перестать воевать с тулчейном. 1. Миф про go.sum (Это не lock-файл!) Выходцы из JS (NPM) или Python (Poetry) часто думают, что go.sum - это аналог package-lock.json. Это фатальная ошибка. В Go версия зависимости фиксируется строго в go.mod. А что тогда делает go.sum? Это криптографическая база данных. Когда вы скачиваете пакет впервые, Go считает хэш от его исходников и записывает в go.sum. При следующих сборках (например, в CI/CD) Go проверяет, совпадает ли скачанный код с этим хэшем. Если хэш не совпадает, тулчейн бьет тревогу. Это защита от атаки Supply Chain (когда злоумышленник взломал GitHub-репозиторий популярной библиотеки и подменил там код, не меняя версию). Вывод: Удаляя go.sum при любой непонятной ошибке, вы отключаете встроенный антивирус языка. Если хэш не сошелся - сначала выясните, почему, а не сносите файл. 2. Директива replace - заряженный пистолет В go.mod есть мощная фича: replace. Она позволяет подменить одну зависимость на другую (или на локальную папку). ✅ Идеальный юзкейс: Вы разрабатываете два микросервиса локально. Сервис А зависит от Сервиса Б. Чтобы не пушить изменения Б в гит ради каждой проверки, вы пишете: replace github.com/myorg/serviceB => ../serviceB ❌ Катастрофа: Вы забываете убрать эту строчку и мержите в main. Если ваш код - это библиотека, которую скачают другие, их тулчейн проигнорирует ваш replace (он работает только в главном модуле). В итоге у них всё сломается. Если это финальный бинарник - CI/CD упадет, потому что пути ../serviceB на сборочном сервере не существует. 3. Проклятие GOPROXY По умолчанию Go скачивает модули не напрямую с GitHub, а через прокси-сервер Google (proxy.golang.org). Если вы работаете в энтерпрайзе с приватными репозиториями (GitLab, Bitbucket), go mod tidy вернет ошибку 404 или 410, потому что гугловский прокси не имеет доступа к вашему внутреннему коду. Senior Tip: Настройте GOPRIVATE Обязательно укажите тулчейну, какие домены нельзя искать в публичном прокси: go env -w GOPRIVATE=github.com/my-secret-org/,gitlab.company.local/ Это спасет кучу нервов и предотвратит утечку имен ваших приватных модулей на публичные сервера. #golang #gomod #architecture #devops #bestpractices 👉 @golang_lib
854
просмотров
2576
символов
Нет
эмодзи
Нет
медиа

Другие посты @golang_lib

Все посты канала →
📦 go mod: Хватит удалять go.sum, когда что-то сломалось Упр — @golang_lib | PostSniper