Как правильно удалить пакеты, установленные через go get в Go?
Правильный способ удаления пакетов в Go (современный подход)
В Go нет прямой команды go uninstall, так как управление пакетами построено иначе, чем в npm или pip. Однако удаление пакетов зависит от версии Go и того, как вы их устанавливали. Рассмотрим два основных сценария.
Сценарий 1: Использование Go Modules (Go 1.16+)
Если вы используете модули (а в современных проектах это стандарт), то удаление пакета сводится к двум шагам:
- Удалить импорт пакета из вашего кода
- Запустить
go mod tidy
Команда go mod tidy автоматически удалит неиспользуемые зависимости из файла go.mod и скачает только те, которые реально нужны. Пример:
// Было в main.go
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.Run()
}
// Стало (удаляем весь импорт gin)
import ()
func main() {
// другой код без gin
}
// В терминале:
go mod tidy
// Теперь go.mod не содержит gin, а go.sum очищен
Если вы хотите полностью удалить пакет вместе с его кэшем (например, чтобы освободить место), выполните:
go clean -modcache // очищает весь модульный кэш (все загруженные пакеты)
// Или удалите конкретную папку вручную:
rm -rf $(go env GOMODCACHE)/github.com/gin-gonic/gin@v1.7.7
Сценарий 2: Старый способ (GOPATH mode, Go < 1.16)
Если вы всё ещё используете GOPATH (не рекомендуется), то пакеты физически находятся в $GOPATH/src. Их удаление:
# Удаляем исходники и скомпилированные бинарники
rm -rf $GOPATH/src/github.com/gin-gonic/gin
rm -rf $GOPATH/pkg/mod/github.com/gin-gonic/gin # если есть
# Или для Windows:
rmdir /S C:\Users\ВашеИмя\go\src\github.com\gin-gonic\gin
Но лучше мигрируйте на модули.
Удаление глобальных инструментов (утилит командной строки)
Если вы устанавливали утилиты через go install (например, go install github.com/xxx/tool@latest), то их бинарники лежат в $GOPATH/bin или $HOME/go/bin. Удалите файл вручную:
# Пример: удаляем утилиту "richgo"
rm $(go env GOPATH)/bin/richgo
# Проверяем, что удалилось:
which richgo # должно выдать "richgo not found"
В современных версиях Go (1.18+) go get больше не устанавливает бинарники — для этого используйте go install. Если вы случайно установили глобальный пакет через go get -u в старом стиле, просто удалите его из go.mod и выполните go mod tidy.
Важные советы для начинающих
- Не удаляйте папки вручную из
GOPATH/src, если используете модули — это может нарушить кэш. Используйтеgo mod tidy. - Для полной очистки проекта: удалите
go.sumи выполнитеgo mod downloadзаново. - Проверьте, какие зависимости реально используются:
go mod graphпокажет дерево зависимостей.
Главное правило: в современном Go не нужно "удалять" пакеты — нужно просто перестать их использовать в коде, а go mod tidy сделает всю грязную работу за вас.
Альтернативный подход: использование Go workspaces и vendor
Если вы работаете в команде или хотите полностью контролировать зависимости, рассмотрите использование go work (workspaces) и папки vendor. Это не удаляет пакеты напрямую, но даёт больше контроля.
Создайте папку vendor в корне проекта:
go mod vendor // копирует все зависимости в папку vendor/
Теперь вы можете просто удалить ненужный пакет из vendor/ вручную и закомментировать его импорт в коде. После этого выполните:
go mod tidy -v // показывает, какие пакеты удаляются
go mod verify // проверяет целостность зависимостей
Преимущество этого метода: вы видите физические файлы и можете их удалять, как в обычной файловой системе. Это особенно полезно, если вы хотите избавиться от транзитивных зависимостей, которые не указаны напрямую в вашем коде.
Однако помните: vendor не рекомендуется для новичков, так как увеличивает размер репозитория. Используйте его только если точно знаете, зачем он нужен. В большинстве случаев достаточно go mod tidy.