air默认只监听.go文件,需在.air.toml的[watch]和[build]节显式配置include_ext=["go","yaml","yml","html","tmpl"];build.bin必须与build.cmd输出路径严格一致;改配置后须手动重启air。
直接用
启动默认只监听
文件,改了
或
完全没反应——这不是 bug,是它压根没被配置成监听这些后缀。
为什么改了非 .go 文件 air 不重启?
air 默认只 watch
后缀,连
都不监听,更别说 YAML、HTML、TOML 了。它定位是 Go 代码热重载工具,不是全栈 Live Reload。
现象:改完
保存,终端毫无动静;
显示版本但构建日志没刷新
原因:watch 配置里没声明这些扩展名,inotify 根本不注册对应文件事件
解决:必须在
的
和
两节都加
注意:
是白名单,不是追加——漏写
就连
都不监听
build.bin 和 cmd 输出路径不一致导致 exec: "./tmp/main": file does not exist
这是 air 启动失败最常卡住的地方:它按
去执行,但
没真把二进制写到那儿。
→ 输出路径是
必须严格等于
,不能是
(少
)或
(Windows 没配后缀)
Linux/macOS 上如果
目录不可写,或
输出的文件没
权限,也会报这个错
稳妥写法:
air 启动后改代码没反应,ps 看不到进程,端口还占着
本质是旧进程没被正确终止,air 发了
,但你的程序没处理它,就僵在那儿了。
go语言参考手册 中文CHM版
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。本文给大家带来Go参考手册,需要的可以来下载! Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 Go 语言特色 简洁、快速、安全 并行、有趣、开源 内存管理、v数组安全、编译
下载
立即学习
“
go语言免费学习笔记(深入)
”;
Go 程序必须显式调用
,否则
信号不会触发 graceful shutdown
检查
是否太小(比如设成
),导致新进程还没起来,旧进程还没关完,端口就被抢
手动清理残留:
(macOS/Linux)或
(Windows)
别依赖
生成的默认配置——它不包含
,而某些框架启动慢,需要留出关闭时间
Windows 上 fork/exec: permission denied 怎么办?
不是权限设置问题,是 Windows Defender 或组策略拦截了未签名的临时可执行文件运行。
临时方案:把
改成
,
对应改成
更稳做法:把
目录加进 Windows Defender 排除列表(不是关防护)
避免用
或旧版
,统一用
路径分隔符必须用
或
,单个
在 TOML 里会被解析为转义字符
真正容易被忽略的是:air 不 reload 自身配置。改完
必须 Ctrl+C 再
重启,它不会感知自己配置文件的变化。
air.goconfig.yamltemplates/index.html.gogo.modconfig.yamlair -v.air.toml[watch][build]include_ext = ["go", "yaml", "yml", "html", "tmpl"]include_extgomain.gobuild.binbuild.cmdbuild.cmd = "go build -o ./tmp/main ."./tmp/mainbuild.bin"./tmp/main""tmp/main"."./tmp/main.exe"./tmpgo build+xbuild.cmd = "go build -o ./tmp/main . && chmod +x ./tmp/main"SIGTERMhttp.Server.Shutdown()os.Interruptbuild.delay100pkill -f 'tmp/main'taskkill /F /IM main.exeair initkill_delaybuild.bin"./tmp/main.exe"build.cmd"go build -o ./tmp/main.exe ."./tmpbrew install airgo getgo install github.com/cosmtrek/air@latest/\.air.tomlair