用 air 搭热加载环境可行但需注意:Windows 默认生成 .exe、Linux/macOS 无后缀,须统一设为 main;必须监听 config/*/.yaml 否则配置不热更;go mod 和 GOPROXY 需提前配好;e.Logger.Fatal(e.Start(...)) 不可少,端口应从环境变量读取。

用 air 搭热加载环境是可行的,但默认配置在 Windows 上会生成 .exe 文件、Linux/macOS 上不加后缀,且不处理 config/*.yaml 变更导致配置热更新失效——这是最常卡住新手的点。
go mod 和 GOPROXY 必须提前配好
没开 Modules 或代理失效时,go get github.com/cosmtrek/air 会卡死或报 unknown revision。这不是 air 的问题,而是 Go 工具链根本拉不到依赖。
- 运行
go env -w GO111MODULE=on强制启用模块系统(Go 1.16+ 默认开启,但旧项目可能被覆盖) - 执行
go env -w GOPROXY=https://goproxy.io,direct,避免访问 GitHub 超时 - 验证:
go env GO111MODULE输出on,go env GOPROXY显示已设置的地址
.air.toml 配置必须区分平台和监听路径
官方示例里 cmd = "go build -o main.exe ." 是 Windows 专用写法;Linux/macOS 下编译出的是无后缀的 main,硬写 .exe 会导致 bin 找不到而启动失败。
初始化并管理阿里云SDK Go 客户端,涵盖 sync.Once 单例、goroutine 安全、endpoint 与 region 配置、VPC 端点及调试。
- 跨平台写法:把
cmd改成go build -o main .,bin改成main - 配置文件变更也要监听:
include加上config/**/*.yaml,否则改了config.yaml不重启 -
exclude至少包含vendor/**和node_modules/**,否则保存 IDE 临时文件也会触发重载
e.Logger.Fatal(e.Start(...)) 不能漏,且端口要可配置
只写 e.Start(":8080") 会导致进程启动后立刻退出,浏览器打不开;而硬编码端口会让 air 热启时因端口占用失败。
立即学习“go语言免费学习笔记(深入)”;
- 必须用
e.Logger.Fatal(e.Start(...))包裹,否则主 goroutine 结束,服务就停了 - 端口从环境变量读取:
port := os.Getenv("PORT"),默认 fallback 到"8080" -
.air.toml的[run].env里设PORT=8080,开发时一致,部署时也方便替换
真正麻烦的不是装 air,而是它默认不监听配置文件、不区分平台二进制名、也不捕获 e.Start 的 panic——这些细节漏一个,热加载就变成“手动 Ctrl+C 再 go run”。

















