推荐用 Air 实现 Gin 项目热重载:安装 go install github.com/air-verse/air@latest,确保 $GOPATH/bin 在 PATH 中;运行 air init 生成 .air.toml,严格匹配 build.cmd 与 build.bin,显式配置 include_ext 和 delay = 1000,启动 air 后修改代码即自动编译重启。

在 Gin 框架开发中频繁手动 Ctrl+C → go run . → 回车,不仅打断思路还浪费大量调试时间;用 Air 实现保存即编译、自动重启服务,能真正把注意力拉回业务逻辑本身,而不是和终端较劲。
安装 Air 并验证可用性
运行 go install github.com/air-verse/air@latest 安装最新版 Air——注意必须用 air-verse/air,旧地址 cosmtrek/air 已归档,继续使用会导致模块解析失败或命令找不到。
安装后执行 air -v 查看版本;若提示 command not found: air,说明 $GOPATH/bin 未加入系统 PATH,需手动补全路径(如 macOS 在 ~/.zshrc 中追加 export PATH=$PATH:$GOPATH/bin 并重载 shell)。
这一步操作起来很简单,直接把命令粘贴进终端回车就行。
生成并定制 .air.toml 配置文件
进入 Gin 项目根目录,运行:
① air init —— 自动生成默认 .air.toml
② 打开该文件,定位到 [build] 区块
③ 修改 cmd 和 bin 字段,确保二者严格一致:
cmd = "go build -o ./tmp/main ."bin = "./tmp/main"
如果项目含 YAML 配置、HTML 模板或 templates/ 目录,必须在 [watch] 下显式声明监听后缀:include_ext = ["go", "yaml", "yml", "html", "tpl"] ——否则改了 config.yaml 或页面模板,Air 完全无反应。
【delay = 1000 是必需项】 否则连续快速保存会触发多次构建,导致 tmp/main 被反复覆盖而无法启动。
启动 Air 并验证热重载生效
在项目根目录下直接运行 air 命令。
看到终端输出类似 running server... [GIN-debug] Listening and serving HTTP on :8080 即表示成功接管进程。
此时打开浏览器访问 http://localhost:8080,再修改任意一个 .go 文件(比如在 handler 里把返回字符串多加个感叹号),保存后观察终端:几秒内出现 building... → killing process... → running server... 三连,页面刷新即见新内容。
如果遇到 exec: "./tmp/main": file does not exist,说明 bin 路径与 cmd 输出不匹配;若报 permission denied,在 cmd 中追加 && chmod +x ./tmp/main 即可。


















