Air实现Go程序的热重载(热加载)

📅 2026/7/10 13:11:37
Air实现Go程序的热重载(热加载)
简介air是Go的热加载工具它可以监听文件或者目录的变化自动编译重启程序提高开发的工作效率。场景在代码修改后需要通过ctrlc来停止项目go run的方式来再次重启项目在开发进行中频繁操作会很麻烦很影响开发的效率air刚好解决了这种问题Air的特性彩色日志输出自定义构建或二进制命令支持忽略子目录启动后支持监听新目录更好的构建过程安装方式1、Go最原始的安装方法但是配置文件会容易出问题go get-ugithub.com/cosmtrek/air2、使用go install安装方法需要配置.bashrc或.zshrcalias air‘$(go env GOPATH)/bin/air’source ~/.zshrc使用 Go 的版本为 1.16-1.23(不包括1.23)goinstallgithub.com/cosmtrek/airv1.40.4使用 Go 的版本为 1.23或更高推荐此方法go install github.com/air-verse/airlatest3、推荐使用 install.sh但是博主本人使用的是第二种方式# binary 文件会是在 $(go env GOPATH)/bin/aircurl-sSfLhttps://raw.githubusercontent.com/cosmtrek/air/master/install.sh|sh-s---b$(goenvGOPATH)/bin# 或者把它安装在 ./bin/ 路径下curl-sSfLhttps://raw.githubusercontent.com/cosmtrek/air/master/install.sh|sh-sair-v4、Docker的安装方式dockerrun-it--rm\-wPROJECT\-eair_wdPROJECT\-v$(pwd):PROJECT\-pPORT:APP SERVER PORT\cosmtrek/air-cCONF然后按照下面的方式在docker中运行项目dockerrun-it--rm\-w/go/src/github.com/cosmtrek/hub\-v$(pwd):/go/src/github.com/cosmtrek/hub\-p9090:9090\cosmtrek/air使用方式同官网的使用方式首先进入你的项目文件夹cd/path/to/your_project最简单的方法是执行# 优先在当前路径查找 .air.toml 后缀的文件如果没有找到则使用默认的air-c.air.toml您可以运行以下命令初始化把默认配置添加到当前路径下的.air.toml文件。air init在这之后你只需执行air命令无需添加额外的变量它就能使用.air.toml文件中的配置了。air如欲修改配置信息请参考 air_example.toml 文件.运行时参数# 会执行 ./tmp/main benchair bench# 会执行 ./tmp/main server --port 8080air server--port8080可以使用 – 参数分隔为 air 命令传递的参数和构建的二进制文件。# 会运行 ./tmp/main -hair ---h# 会使用个性化配置来运行 air然后把 -h 后的变量和值添加到运行的参数中air-c.air.toml ---hair_example.toml示例完整的官网配置信息根据需要修改。# [Air](https://github.com/cosmtrek/air) TOML 格式的配置文件# 工作目录# 使用. 或绝对路径, 请注意以下目录tmp_dir必须在根目录root下。root.tmp_dirtmp[build]# 只需要写你平常编译使用的shell命令。也可以使用make# Windows平台示例: cmd go build -o tmp\main.exe .cmdgo build -o ./tmp/main .# 由cmd命令得到的二进制文件名# Windows平台示例bin tmp\main.exebintmp/main# 自定义执行程序的命令可以添加额外的编译标识例如添加 GIN_MODErelease# Windows平台示例full_bin tmp\main.exefull_binAPP_ENVdev APP_USERair ./tmp/main# 监听扩展名的文件include_ext[go,tpl,tmpl,html]# 忽略不监听文件的扩展名或目录exclude_dir[assets,tmp,vendor,frontend/node_modules]# 监听指定目录的文件include_dir[]# 忽略不监听指定文件exclude_file[]# 忽略符合通过正则匹配到的文件exclude_regex[_test\\.go]# 忽略未进行修改的文件exclude_unchangedtrue# 按照目录的符号链接follow_symlinktrue# 这个日志文件放在你的tmp_dir中logair.log# 如果文件更改过于频繁则没有必要在每次更改时都触发构建。可以设置触发构建的延迟时间/毫秒delay1000# ms# 发生构建错误时停止运行旧的二进制文件stop_on_errortrue# 杀死进程前发送中断信号(Windows不支持)send_interruptfalse# 发送中断信号后延迟时间/毫秒kill_delay500# ms# 在运行二进制文件时添加额外的参数 (bin/full_bin)。将运行“./tmp/main hello world”args_bin[hello,world][log]# 显示日志时间timefalse[color]# 自定义每个部分的颜色。如果未找到颜色请使用原始应用程序日志。mainmagentawatchercyanbuildyellowrunnergreen[misc]# 退出时删除 tmp 目录clean_on_exittrue至此按照使用方法先执行air init然后执行air热加载就启动了调试运行air -d命令能打印所有日志。遇到 “command not found: air” 或 “No such file or directory”exportGOPATH$HOME/xxxxxexportPATH$PATH:$GOROOT/bin:$GOPATH/binexportPATH$PATH:$(goenvGOPATH)/bin---- 请确认这行在您的配置信息中部署请注意这需要 Go 1.16 因为使用go mod来管理依赖。# 1. 先fork项目# 2. 然后克隆clone下来mkdir-p$GOPATH/src/github.com/cosmtrekcd$GOPATH/src/github.com/cosmtrekgitclone gitgithub.com:YOUR USERNAME/air.git# 3. 切换路径安装依赖cdairmakeci# 4. 这样就可以使用了makeinstall