go mod graph и go mod why: откуда взялась эта зависимость
Когда в go.mod появляется незнакомый модуль с пометкой // indirect или go.sum вырастает вдвое, нужны инструменты разбора. go mod why модуль отвечает на вопрос «зачем он вообще нужен»: печатает кратчайшую цепочку импортов от ваших пакетов до целевого; если пути нет, честно говорит, что модуль не нужен ни одному пакету. go mod graph печатает весь граф требований парами «кто требует кого» — это уже сырьё для поиска, кто именно тянет неудачную версию. go list -m all показывает итоговый выбор версий после работы алгоритма, а go list -m -u all добавляет доступные обновления. Практический порядок такой: сначала why, чтобы понять нужность, потом graph с фильтром, чтобы найти виновника версии, и только затем решение — обновить промежуточную зависимость, заменить её или отказаться. Отдельно полезен go list -deps, показывающий пакеты, а не модули: он объясняет, почему безобидный импорт тянет половину интернета.