Как правильно удалить пакеты, установленные через go get?
Правильный способ удаления пакетов в Go (модульный режим)
Вы столкнулись с типичной путаницей начинающих Go-разработчиков. В Go нет команды go remove или go uninstall, потому что управление зависимостями работает иначе, чем в npm или pip. Давайте разберёмся по порядку.
Начиная с Go 1.11, основной способ управления зависимостями — это модули (go modules). Если ваш проект использует go.mod (а вы показали, что используете), то вы работаете именно в модульном режиме. В этом случае удаление пакета — это двухэтапный процесс:
- Удалить все импорты пакета из исходного кода.
- Запустить
go mod tidy.
Пошаговая инструкция
Шаг 1. Откройте все файлы в вашем проекте и удалите строки вида:
import (
"github.com/jinzhu/gorm"
)
Если пакет используется в коде (например, db, _ := gorm.Open(...)), замените эту логику на что-то другое или удалите целиком. Компилятор Go не позволит удалить зависимость, пока на неё есть ссылки.
Шаг 2. После того как вы убрали все импорты, выполните в терминале в корне проекта:
go mod tidy
Эта команда делает две вещи:
- Удаляет из
go.modвсе зависимости, которые больше не используются в коде. - Удаляет соответствующие версии пакетов из кэша загрузок (обычно находится в
$GOPATH/pkg/mod).
Проверка. После выполнения go mod tidy ваш go.mod должен выглядеть так:
module myproject
go 1.21
require (
github.com/gin-gonic/gin v1.9.1
)
А файл go.sum тоже обновится — из него исчезнут хеши удалённого пакета.
Что делать, если пакет всё ещё "висит"?
Бывает, что go mod tidy не срабатывает, потому что:
- Вы случайно оставили импорт в каком-то файле (проверьте через
grep -r "gorm" .). - Пакет используется транзитивно (через другую зависимость). В этом случае
go mod tidyоставит его, но пометит как// indirect. Если вам нужно избавиться и от него — придётся удалить родительский пакет. - Вы работаете в старом режиме
GOPATH(безgo.mod). Тогда да, нужно просто удалить папку изsrc/вручную.
Важное замечание про кэш
Даже после go mod tidy сам скачанный архив пакета может остаться в системном кэше Go ($GOPATH/pkg/mod/cache). Это нормально — кэш общий для всех проектов, и его не нужно чистить вручную. Если очень хочется, можно выполнить:
go clean -modcache
Но это удалит кэш всех пакетов, и при следующей сборке их придётся скачивать заново.
Итог
Запомните главное правило: не трогайте папки вручную, используйте go mod tidy. Это официальный и единственно правильный способ "удаления" пакетов в современном Go. Если вы работаете с go.mod, то физическое расположение файлов в pkg/mod вас не должно волновать — Go сам управляет этим.
Альтернативный подход: ручная очистка для старых проектов (GOPATH mode)
Если вы всё ещё используете старый режим GOPATH (без go.mod), то ваш единственный вариант — ручное удаление. В этом случае пакеты устанавливаются прямо в $GOPATH/src, и никакой автоматической очистки нет.
Чтобы удалить пакет вручную:
- Найдите его расположение:
echo $GOPATH(обычно~/go). - Удалите папку пакета:
rm -rf $GOPATH/src/github.com/jinzhu/gorm. - Если у пакета есть зависимости, они тоже лежат в
src/— их можно удалить аналогично, но будьте осторожны: другие пакеты могут их использовать. - Очистите кэш сборки:
go clean -i -x github.com/jinzhu/gorm(удалит скомпилированные объектные файлы).
Недостатки ручного метода:
- Легко оставить "осиротевшие" зависимости, которые занимают место.
- Нет гарантии, что вы удалили все следы — пакет мог быть собран в
pkg/. - Рекомендую мигрировать на модули (создать
go.modчерезgo mod init), это избавит вас от ручной возни.
Ответов пока нет.
Войдите чтобы оставить ответ
Блоги