Ответ
go mod tidy — это стандартная команда Go для управления зависимостями проекта. Она приводит файл go.mod в полное соответствие с исходным кодом проекта.
Основные действия go mod tidy:
- Добавляет недостающие зависимости: Сканирует все
.goфайлы, находит импорты пакетов, которых нет вgo.mod, и добавляет их. - Удаляет неиспользуемые зависимости: Если в
go.modесть зависимость, которая больше не импортируется ни в одном файле проекта, она будет удалена. - Синхронизирует
go.sum: Обновляет файлgo.sum, добавляя контрольные суммы для новых зависимостей и удаляя их для неиспользуемых.
Пример:
Предположим, у нас есть:
Файл main.go
package main
import "fmt"
import "rsc.io/quote/v4" // Новая, еще не добавленная зависимость
func main() {
fmt.Println(quote.Go())
}
Файл go.mod
module myproject
go 1.18
require github.com/google/uuid v1.3.0 // Старая, больше не используемая зависимость
После выполнения команды go mod tidy файл go.mod будет выглядеть так:
module myproject
go 1.18
require rsc.io/quote/v4 v4.0.1 // Добавлена новая
// Зависимость github.com/google/uuid будет удалена
Когда использовать:
- Перед коммитом: Чтобы убедиться, что
go.modотражает актуальное состояние проекта. - После удаления или добавления кода: Особенно после рефакторинга, когда зависимости могли измениться.
- Для поддержания чистоты проекта: Регулярное использование помогает избежать раздувания
go.modиgo.sum.
Ответ 18+ 🔞
А, ну это же про нашу любимую команду go mod tidy, которая в проекте порядок наводит, как заботливая, но строгая уборщица с тряпкой и ведром!
Вот представь: пишешь ты код, подключаешь какие-то левые библиотеки через go get, потом половину выкидываешь, а в go.mod этот цифровой мусор так и остаётся висеть. Получается бардак, ёпта! Файл зависимостей раздувается, как жаба, и никто не знает, что там реально нужно, а что — исторический артефакт, вроде старого носка под кроватью.
Так вот, go mod tidy — это как раз та волшебная палочка, которая говорит: «Сейчас, сука, я тут всё по полочкам разложу!». Она делает три главные вещи, и делает их жёстко:
- Добавляет то, чего не хватает. Она проходит по всем твоим
.goфайлам, как ревизор с проверкой, смотрит, какие импорты ты используешь, но которых нет вgo.mod. Нашла дыру? Хуяк — и тут же добавляет нужную зависимость. Всё честно. - Выпиливает то, что не нужно. А это самое сладкое! Если в
go.modзатесалась какая-то библиотека, которую ты уже сто лет не используешь,tidyеё безжалостно выкинет на мороз. Чистит проект от цифрового жира, блядь. Красота! - Приводит в порядок
go.sum. Этот файл с контрольными суммами она тоже синхронизирует: для новых зависимостей — записи добавит, для удалённых — почистит. Чтобы всё было прозрачно и без сюрпризов.
Вот смотри, как это работает на живом примере:
Допустим, у тебя есть файлик main.go, где ты уже начал использовать какую-то новую библиотеку для цитат:
package main
import "fmt"
import "rsc.io/quote/v4" // Опа, новая фича! Но в go.mod её ещё нет!
func main() {
fmt.Println(quote.Go())
}
А твой go.mod всё ещё живёт в прошлом и таскает за собой какую-то старую зависимость от UUID, которую ты уже выкинул:
module myproject
go 1.18
require github.com/google/uuid v1.3.0 // Эту штуку мы уже не используем, она тут как манда с ушами торчит
Ты запускаешь go mod tidy и наблюдаешь магию. Команда смотрит на код, видит, что rsc.io/quote/v4 нужен, а github.com/google/uuid — нет. И делает новый, чистый go.mod:
module myproject
go 1.18
require rsc.io/quote/v4 v4.0.1 // Новенькое добавила
// А старый uuid — просто вычеркнула, в рот его чих-пых!
Так когда же эту команду вызывать? Да почти всегда!
- Перед тем как закоммитить — святое дело. Чтобы не позориться и не тащить в репу хлам.
- После любого редактирования кода, особенно когда что-то удаляешь или добавляешь новые импорты. Рефакторил? Запусти
tidy. - Просто для поддержания гигиены проекта. Периодически запускай, как генеральную уборку. Чистота — залог здоровья кодовой базы, а то потом разберёшься, кто тут у тебя неиспользуемый пидарас шерстяной завёлся.
Короче, go mod tidy — это must have, базовый инструмент, чтобы не превратить проект в помойку. Используй на здоровье!