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 或更高:
- 下载新版:https://go.dev/dl/
-
安装后运行:
go clean -cache -modcache
✅ 替代方案:使用 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 工具 |
热更新更快 |