跳转至

Go 构建缓存过大的清理方法

1. 问题现象

在 Linux 系统上进行批量 go build 操作后,可能会出现磁盘空间被占满的情况,需要找到占用空间较大的目录并进行清理。

2. 环境信息

项目 说明
CPU 3A5000
系统 Debian 10

3. 排查步骤

3.1 检查根目录占用情况

[root@bogon merore]# du -sh --exclude=/home/merore /

说明:由于家目录下挂载了远程文件系统,所以先排除家目录,检查其他目录的占用情况。

3.2 检查家目录占用情况

[root@bogon merore]# du -sh --exclude=/home/merore/workspace /home
122G    /home

3.3 检查隐藏目录

[root@bogon merore]# du -sh .cache
119G    .cache

[root@bogon .cache]# du -sh ./*
...
119G    ./go-build
...

结论:确认是 /home/merore/.cache/go-build 目录占用了大量空间。

4. 解决方案

4.1 清理 Go 构建缓存

go clean -cache

4.2 其他清理选项

命令 作用
go clean -cache 清理构建缓存
go clean -modcache 清理模块缓存
go clean -i 清理已安装的包
go clean -r 递归清理依赖

5. 预防措施

5.1 定期清理缓存

可以将清理命令添加到 crontab 中,定期执行:

# 每月清理一次 Go 缓存
0 0 1 * * go clean -cache

5.2 调整缓存目录

可以通过设置环境变量 GOCACHE 来指定缓存目录,将其放在空间较大的分区:

# 在 ~/.bashrc 或 ~/.zshrc 中添加
export GOCACHE=/path/to/large/partition/.cache/go-build

5.3 优化构建过程

  • 使用 -trimpath 选项减少构建缓存大小: bash go build -trimpath
  • 对于大型项目,考虑使用构建缓存服务器

6. 相关命令

6.1 du 命令使用技巧

  • du -sh <directory>:查看目录大小
  • du -sh --exclude=<directory> <path>:排除指定目录
  • du -h --max-depth=1 <directory>:查看一级子目录大小

6.2 Go 命令相关选项

  • go env:查看 Go 环境变量,包括缓存目录位置
  • go env GOCACHE:查看当前缓存目录
  • go mod tidy:清理未使用的依赖

7. 总结

  1. 问题原因:Go 构建过程中会在 ~/.cache/go-build 目录中生成大量缓存文件
  2. 解决方案:使用 go clean -cache 命令清理缓存
  3. 预防措施:定期清理缓存、调整缓存目录位置、优化构建过程
  4. 实用技巧:使用 du 命令的 --exclude 选项排查磁盘占用情况

通过以上方法,可以有效管理 Go 构建缓存,避免磁盘空间被占满的问题。