Go 1.10+ 默认启用构建缓存,由GOCACHE控制,自动复用中间产物;未设置时使用系统默认路径,与GOMODCACHE物理隔离;跨版本自动失效,仅通过环境变量配置,go clean -cache 不清空整个目录。

构建缓存路径由 GOCACHE 控制,不设也会自动启用
Go 1.10+ 默认开启构建缓存,根本不用手动“开启”,只要 GOCACHE 目录可写且存在,go build 和 go test 就会自动复用中间产物(如 .a 文件、语法分析结果)。没设 GOCACHE 时,Go 自动选系统默认路径:$HOME/Library/Caches/go-build(macOS)、$HOME/AppData/Local/go-build(Windows)、$HOME/.cache/go-build(Linux)。这个目录不是临时的,长期保留,直接影响构建速度。
GOCACHE 和 GOMODCACHE 完全无关,别混用
常见误操作是把模块下载缓存(GOMODCACHE,默认 $GOPATH/pkg/mod)和构建缓存(GOCACHE)当成一回事。它们物理隔离、互不影响:
-
GOCACHE存编译中间产物,影响go build速度 -
GOMODCACHE存解压校验后的模块源码,影响go mod download和首次go build的网络耗时 - 跨 Go 版本(如 1.21 → 1.22)时,
GOCACHE自动失效,不会误用旧数据;但GOMODCACHE中的模块仍可复用
修改 GOCACHE 路径只需设环境变量,无其他配置方式
没有配置文件、没有命令行开关,唯一方式就是设置 GOCACHE 环境变量。它在 shell 启动时生效,所有后续 go 命令都会继承:
- Linux/macOS:在
~/.bashrc或~/.zshrc中加export GOCACHE=/path/to/fast/cache - Windows PowerShell:
$env:GOCACHE="D:\go-cache" - Dockerfile:
ENV GOCACHE=/tmp/go-cache(确保该路径可写) - CI 场景(如 GitHub Actions):用
actions/cache缓存你设的GOCACHE目录,避免每次重建丢失
go clean -cache 不清空整个目录,只删无效条目
这个命令常被误解为“清缓存=删光”,其实它只清理过期或无效的缓存项,比如源码已删、依赖版本变动、Go 工具链升级后的残留。它不会碰你手动放进 GOCACHE 目录的其他文件,也不会清空整个目录。
立即学习“go语言免费学习笔记(深入)”;
真正清空全部构建缓存,得手动 rm -rf $GOCACHE(Linux/macOS)或 Remove-Item -Recurse -Force $env:GOCACHE(PowerShell)。但更常见的需求是诊断——如果 go build -a 突然变慢,而 go clean -cache 后又快了,大概率是缓存损坏或磁盘满,这时候才需要考虑彻底清理。
最易忽略的一点:构建缓存对 go list、go mod graph 这类元数据解析命令完全不生效,它们不读 GOCACHE,也不走编译流程。别指望调高 GOCACHE 能加速这些命令。


















