请稍侯

go build很慢

17 June 2025
更多

如果你运行 go build -o main.exe .\main.go 仍然很慢(比如几十秒到一分钟),那说明不是 IDE 问题,而是系统或 Go 构建链本身的问题。我们一步步来排查。


✅ 先确认是不是构建缓存没有生效

Go 编译是有缓存的,如果每次 build 都重新编译全部内容,肯定慢。

请尝试这个测试:

🔁 连续两次运行 go build 看是否变快

go build -o main.exe .\main.go  // 第一次
go build -o main.exe .\main.go  // 第二次
  • 如果第二次依然很慢 → 缓存无效,可能是某些配置问题。
  • 如果第二次变快(1-2 秒) → 第一次是正常编译,第二次用了缓存,这是正常的。

你也可以加上 -x 选项观察 Go 执行了哪些操作:

go build -x -o main.exe .\main.go

✅ 检查是否存在以下问题

1. 是否启用了 CGO?

CGO 会严重拖慢构建速度,尤其在 Windows 下。

运行:

go env CGO_ENABLED
  • 如果是 1,表示启用了 CGO。
  • 设置为禁用(临时):

    set CGO_ENABLED=0
    go build -o main.exe .\main.go
    

如果禁用 CGO 后速度明显提升,就可以永久设置:

setx CGO_ENABLED 0

2. 是否 go.mod 中依赖太多模块?

  • go.mod 中如果有很多依赖,且未启用 vendoring(或者频繁变动),可能导致 go build 每次都检查依赖。
  • 试试执行:

    go mod tidy
    go mod vendor
    

然后 build 时加 -mod=vendor

go build -mod=vendor -o main.exe .\main.go

3. 杀毒软件干扰是否彻底排除?

一定要将以下路径加入 Windows Defender 的排除列表:

  • Go 安装目录(如 C:\Go
  • 项目目录(如 E:\www\go\project
  • GOCACHE(如 D:\temp\go-build

4. 是否项目代码量较大或使用反射、嵌套生成等重计算操作?

  • 大项目中用到泛型、interface、反射、复杂依赖链,都会让 build 变慢。
  • 检查 main.go 是否只是一个很小的测试文件?

5. 编译器是否异常?Go 版本是否较老?

查看当前版本:

go version

建议升级到最新版本,例如 Go 1.22 或更高:


✅ 替代方案:使用 Air

开发时用 air 实现热重启,避免你手动编译每次都等 1 分钟:

go install github.com/cosmtrek/air@latest
cd your-project
air init  # 生成 air.toml
air       # 自动监听文件变动,自动编译并重启

🔍 总结

检查项 说明
🔁 build 是否缓存命中 连续 build 观察时间差
🔧 CGO_ENABLED 是否关闭 setx CGO_ENABLED 0
🔥 杀毒软件是否彻底排除 特别是 go.exe / 项目目录 / GOCACHE
📦 go.mod 依赖是否过多 尝试 go mod tidy && go mod vendor
🆙 是否用最新 Go 版本 推荐 Go 1.22+
🚀 使用 air 工具 热更新更快

另外在 idea编译时,不要按包,按目录编译