Skip to content
7 / 15

Директивы replace и exclude: когда уместны и чем опасны

replace подменяет модуль другим — версией, форком или локальным каталогом; exclude запрещает конкретную версию, заставляя алгоритм выбрать следующую. Обе директивы действуют только в главном модуле: если ваш модуль подключат как библиотеку, его replace будет проигнорирован. Отсюда правило: библиотека с replace в go.mod собирается у автора и разваливается у потребителя — это самая частая ловушка. Законные применения узкие. Локальная разработка двух модулей одновременно — но с Go 1.18 для этого правильнее go.work, который не попадает в репозиторий. Временный форк с непринятым исправлением — с обязательным комментарием и сроком. Замена исчезнувшего или переименованного модуля. exclude нужен ещё реже: он не даёт верхней границы версий, а лишь пропускает конкретную, и обычно проблему решают явным require более новой версии.

Директивы replace и exclude: когда уместны и чем опасны | JScriptiser