Перейти к содержимому
9 / 15

Кеш сборки GOCACHE: что кешируется и почему пересборка бывает долгой

GOCACHE хранит результаты компиляции: объектные файлы пакетов, результаты go vet и успешных прогонов тестов. Ключ кеша считается по всему, что влияет на результат — исходники пакета и всех его зависимостей, версия компилятора, флаги сборки, значения переменных окружения вроде CGO_ENABLED и GOOS, содержимое тегов. Отсюда все практические выводы. Смена любого флага делает кеш бесполезным: сборка с -race и без него кешируются раздельно, и то же с -tags и -trimpath. Правка одного пакета инвалидирует все пакеты, которые от него зависят, но не соседние — поэтому изменение в корневом внутреннем пакете пересобирает почти всё. Тесты кешируются только при отсутствии внешних воздействий: чтение переменной окружения или файла, не учтённого в ключе, отключает кеширование для этого теста. Флаг -count=1 — штатный способ обойти кеш тестов; go clean -testcache делает то же глобально.