air是目前最轻量、兼容性最好、配置最直白的Go热重载工具,它监听文件变化、自动构建并重启进程,原生支持Go Modules,安装命令为go install github.com/cosmtrek/air@latest。

go run 不能替代自动编译,它只是单次执行
很多刚配好环境的人误以为 go run main.go 就是“热编译”,其实不是。它每次运行都重新编译+执行,但不会监听文件变化、不自动触发、不保留进程——本质是手动快捷方式,不是开发期自动构建方案。
真正需要的是:源码变动 → 自动编译 → (可选)重启进程。这得靠外部工具补足。
推荐用 air,不是 fresh 或 gin
air 是目前最轻量、兼容性最好、配置最直白的 Go 热重载工具。它原生支持 Go Modules,不需要改项目结构,也不依赖特定框架。
- 安装:
go install github.com/cosmtrek/air@latest - 确保
$GOBIN在PATH中(否则终端找不到air命令) - 在项目根目录执行:
air,它会自动找main.go或cmd/下入口 - 默认监听
.go和.tmpl文件,改完保存即触发构建+重启
注意:fresh 已多年未维护;gin 虽然流行,但默认只适配 Web 项目(需额外加 --include-dir 才能支持 CLI 类项目),且对嵌套模块路径识别不稳定。
立即学习“go语言免费学习笔记(深入)”;
air.yaml 配置关键项:忽略测试和 vendor
项目根目录放 air.yaml 可精细控制行为。最容易踩坑的是没排除 _test.go 或 vendor/,导致修改测试文件也触发重启,或 vendor 更新后反复编译。
最小可用配置示例:
root: .
testdata_dir: tests
tmp_dir: .air
build: cmd: go build -o ./tmp/main . bin: ./tmp/main log: build-errors.log
watch: exclude_dirs: [vendor, tmp, .git, .air] exclude_files: ["*.md", "README.md"] include_exts: [go, mod, sum]
重点:exclude_dirs 必须含 vendor;include_exts 别漏掉 mod 和 sum,否则改依赖后不会重建。
Windows 下 PATH 和权限问题最常卡住 air 启动
在 Windows 上,air 启动失败十有八九是这两类问题:
-
air命令找不到:确认%USERPROFILE%\go\bin已加进系统 PATH,且终端是新打开的(旧终端不读新 PATH) - 提示
permission denied或闪退:关闭杀毒软件实时防护(尤其 360、火绒),它们会拦截air创建子进程或写.air目录 - 中文路径报错:项目路径含中文或空格时,
air的某些版本解析失败,临时解法是把项目移到C:\dev\这类纯英文路径
Mac/Linux 用户基本不会遇到这些,但 Windows 用户务必先验证 go build -o ./tmp/main . 能手动成功,再试 air。
自动编译不是开箱即用的魔法,核心在于让工具链各环节不互相干扰:Go 编译器负责生成二进制,air 负责调度和监听,而你的 PATH 和目录权限决定了它们能不能真正协作起来。漏掉任意一环,都会表现为“改了代码没反应”。


















