gomodcache是唯一控制go模块下载缓存目录的环境变量,必须设为可写绝对路径并重启终端和goland才能生效;goenv、gopath及goland界面配置均无法改变该路径。

GoLand 本身不管理 Go 模块缓存,真正起作用的是 Go 工具链的 GOMODCACHE 环境变量——改对它,C 盘才能真正减负。
为什么改 GoLand 设置没用?
GoLand 的「Go SDK」或「Project SDK」配置只影响 IDE 自身的代码补全、语法检查和调试能力,它不控制 go build、go mod download 等命令实际把模块下载到哪。那些文件默认会塞进 %USERPROFILE%\go\pkg\mod(Windows)或 ~/go/pkg/mod(macOS/Linux),而这个路径由 Go 运行时读取 GOMODCACHE 决定,和 GoLand 界面里的任何路径设置无关。
常见错误现象:
– 在 GoLand 的 Settings → Go → GOROOT 或 GOPATH 里改了路径,go env GOMODCACHE 输出却还是 C 盘默认值
– 项目构建后,D 盘没多出缓存文件,C 盘的 %USERPROFILE%\go\pkg\mod 却持续膨胀
必须设置 GOMODCACHE 环境变量
这是唯一有效且官方支持的方式。Windows 用户尤其要注意:必须在系统级或用户级环境变量中设置,不能只在 GoLand 的「Run Configuration」里临时加——后者只影响单个运行任务,不影响 go mod 命令和 IDE 底层依赖解析。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- PowerShell(推荐):
$env:GOMODCACHE="D:\GoCache\mod",然后写入$PROFILE永久生效 - CMD(用户级):控制面板 → 系统 → 高级系统设置 → 环境变量 → 新建用户变量
GOMODCACHE,值为D:\GoCache\mod - 验证是否生效:
go env GOMODCACHE必须输出你设的 D 盘路径,否则后续所有操作都白搭 - 路径要求:不能含中文、空格或特殊符号;目录需提前手动创建,并确保当前用户有完全读写权限
改完之后旧缓存不会自动迁移
GOMODCACHE 只影响后续新下载的模块,之前下在 C 盘的缓存还在原地占着空间,也不会被自动清理或复用。
- 手动清理旧缓存:
go clean -modcache—— 注意:这会清空当前GOMODCACHE指向的整个目录,执行前确认go env GOMODCACHE已指向 D 盘新路径 - 如果想保留部分常用模块(比如
golang.org/x/sys),不要用go clean -modcache,而是直接进旧缓存目录(如%USERPROFILE%\go\pkg\mod),按需删子目录 - 首次使用新
GOMODCACHE路径时,go mod download会重新拉取全部依赖,带宽和时间成本比迁移略高,但只发生一次
配套建议:顺手把 GOCACHE 和 GOBIN 也挪走
GOCACHE 存构建中间产物(如编译对象文件),默认也在 C 盘用户目录;GOBIN 存 go install 生成的可执行文件,两者同样吃空间。
-
GOCACHE:设为D:\GoCache\build,同样用环境变量方式配置 -
GOBIN:建议显式设置,如D:\GoBin,并把它加进系统PATH;避免依赖默认%USERPROFILE%\go\bin,否则装的工具(如gopls、dlv)仍会落 C 盘 - GOROOT 不建议挪动:它是只读的 SDK 根目录,解压到 D 盘即可(如
D:\DevTools\Go),但不用设环境变量,GoLand 手动指定 SDK 路径时选它就行
最易被忽略的一点:环境变量修改后,必须重启 GoLand 和所有已打开的终端窗口,否则 IDE 和命令行仍读的是旧值。不是“设置完就立刻生效”,而是“重启后才真正接管”。










