GoLand中air改代码没反应,根本原因是air未找到二进制或未监听修改文件:root须设为项目根目录(如"."),build.bin必须与build.cmd输出路径完全一致(如"./tmp/main"),include_ext需手动添加非.go扩展名(如"yaml"、"tmpl")。

GoLand 里用 air 启动后改代码没反应?检查这三个配置项
根本原因通常是 air 没找到要执行的二进制,或监听路径压根没覆盖到你改的文件。它不靠 IDE 驱动,而是独立读 .air.toml,GoLand 只是启动器。
-
root必须设为项目根目录(即含go.mod的路径),填"."最稳;填绝对路径在换机器或 CI 场景下容易失效 -
build.bin必须和build.cmd输出路径完全一致,比如./tmp/main,否则exec: "./tmp/main": file does not exist -
include_ext默认只监听.go,加了template或yaml配置就得手动补上"tmpl","yaml",否则改了配置文件也不触发
GoLand Terminal 里 air 和 dlv 调试冲突怎么办
VS Code 或 GoLand 的 Delve 调试器与 air 无法共存:两者都试图接管进程生命周期,air 会 kill 掉 dlv 启动的进程,导致断点失效、connection refused 报错。
- 调试时直接关掉
air,在 GoLand 里右键main.go→ Debug 'main',用原生 dlv - 想边调试边看热重载效果?只能分窗口:一个终端跑
air,另一个终端用curl或 Postman 手动触发接口验证逻辑变更 - 别试图用
air -c .air.toml --debug模式“兼容” dlv —— 它只是输出调试日志,不是接入 dlv 协议
Docker + GoLand 开发时热更新失效的常见挂载陷阱
本地改代码,容器里 air 不重启,90% 是挂载路径没对齐。Docker 的 -v 是单向同步,但 GoLand 启动容器时若没显式挂载,就等于在镜像里跑纯静态二进制。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- 确保
docker run或docker-compose.yml中有-v $(pwd):/app,且WORKDIR /app和air的root = "."对应 - Mac 上用 Docker Desktop 时,宿主机路径需在 Resources → File Sharing 里提前放行,否则挂载后目录为空
- 别漏掉
go.sum和go.mod的一致性:容器内go mod download用的是镜像里的 GOPROXY,而本地改依赖后,air不会自动go mod tidy,得手动加到build.cmd里,例如:cmd = "go mod tidy && go build -o ./tmp/main ."
为什么 air 重启后端口报 address already in use
Go 没有真正的热加载,每次都是 kill -TERM 旧进程再启新实例。如果旧进程没及时退出,新进程 bind 就会失败。
- 在
.air.toml里设kill_delay = 500(单位毫秒),给旧进程留出 graceful shutdown 时间 - HTTP Server 必须实现
srv.Shutdown(ctx),否则kill_delay再长也白搭 - 避免用
go run main.go启动 —— 它不响应SIGTERM,air只能kill -KILL,端口释放不可控
真正卡住效率的往往不是工具链多难配,而是 air 的 build.bin 和实际输出路径不一致,或者改了 config.yaml 却忘了往 include_ext 里加 "yaml" —— 这类细节不报错,只沉默失效。

















