Как очистить кэш Go на Mac: go clean -cache и -modcache

Очистить кэш Go на Mac безопасно: у Go два кэша — скомпилированных пакетов с результатами тестов и скачанных модулей, — и всё нужное проекту он соберёт или скачает заново, а ваш код останется. Старые результаты сборки Go убирает сам, а скачанные модули не удаляет никогда, поэтому здесь — как очистить каждый кэш и почему удалить папку модулей вручную не получается.

MacWashing, раздел «Сборка мусора»: найдены мусор Xcode, пользовательский кэш, установщики и журналы, к очистке 22,83 ГБ
  1. Откройте MacWashing и выберите Сборка мусора в боковом меню.
  2. Нажмите Начать сканирование.
  3. Просмотрите находки и нажмите Очистить. Всё спорное остаётся без галочки.

Бесплатная пробная версия · macOS 14 и новее

Где Go хранит кэш

У Go два кэша. В кэше сборки лежат скомпилированные пакеты и результаты тестов. В кэше модулей — исходный код зависимостей, которые Go скачал. Эта команда показывает папку кэша сборки, по умолчанию ~/Library/Caches/go-build:

go env GOCACHE

А эта — папку кэша модулей, по умолчанию ~/go/pkg/mod:

go env GOMODCACHE
Терминал: папки кэша сборки и кэша модулей Go

Как очистить кэш сборки Go

Эта команда удаляет весь кэш сборки: скомпилированные пакеты и сохранённые результаты тестов. Код и скачанные модули остаются. Следующая сборка скомпилирует всё заново:

go clean -cache

Чтобы сбросить только результаты тестов и go test снова прогонял все тесты, а не писал (cached), выполните go clean -testcache. go clean -fuzzcache удаляет файлы, которые фаззинг-тесты хранят в кэше сборки.

Результаты сборки, которыми давно не пользовались, Go удаляет сам, поэтому кэш сборки редко растёт без конца. Очищайте его, когда место нужно прямо сейчас.

Как очистить кэш модулей командой go clean -modcache

Эта команда удаляет все скачанные модули вместе с их распакованным исходным кодом. Проекты, go.mod и go.sum остаются. Следующая сборка скачает нужные модули заново, поэтому ей понадобится интернет:

go clean -modcache

Из кэша модулей Go сам ничего не удаляет, и предела размера у него нет. На Mac, где несколько лет пишут на Go, обычно именно он больше.

Почему rm -rf не удаляет ~/go/pkg/mod

Go делает файлы и папки модулей доступными только для чтения, чтобы редактор или тест случайно не изменил зависимость. Поэтому rm -rf ~/go/pkg/mod заканчивается ошибкой «Permission denied». Используйте go clean -modcache: она удаляет кэш, несмотря на права доступа.

А с MacWashing это в один клик

MacWashing, раздел «Сборка мусора»: найдены мусор Xcode, пользовательский кэш, установщики и журналы, к очистке 22,83 ГБ

Сборка мусора в MacWashing показывает кэш сборки и кэш модулей Go в разделе «Кэш программ», оба без галочки: Go пришлось бы всё заново компилировать или скачивать, поэтому решаете вы. Кэш других программ очищается за тот же проход.

Бесплатная пробная версия · macOS 14 и новее

Вопросы и ответы

Удалит ли MacWashing мои файлы при очистке?

Нет. Он удаляет только то, что может сопоставить с известной программой или известным видом мусора, и только там, где программы оставляют файлы; macOS и файлы Apple не затрагиваются. Всё спорное помечено и остаётся без галочки, пока вы не решите.

Что будет с открытыми программами?

Если файлы заняты открытой программой, MacWashing подождёт, пока она закроется, или закроет её по вашей команде, а после очистки откроет снова.

Это бесплатно?

Да, в пробном режиме: Сборка мусора и Деинсталлятор вместе освобождают до 25 ГБ, без аккаунта и карты.

Безопасно ли очищать кэш Go?

Да. В обоих кэшах лежит то, что Go может собрать или скачать снова. Первая сборка после очистки будет медленнее, а после go clean -modcache ей понадобится интернет.

Чем go clean -cache отличается от go clean -modcache?

-cache очищает скомпилированные пакеты и результаты тестов. -modcache очищает исходный код скачанных зависимостей. Это разные папки, и каждая команда чистит только свою.

Почему кэш Go снова растёт?

Каждая сборка добавляет скомпилированные пакеты, а каждая новая версия зависимости скачивается в кэш модулей. Старые результаты сборки Go удаляет сам, а все версии модулей хранит, пока вы не очистите кэш модулей.