今天为大家介绍一款go语言开发过程中使用的自动重载工具.
有很多新手在go语言开发过程中还在使用go run来运行程序;或者使用一些框架内置自动重载工具在进行开发,比如gf、bee。今天我在这里介绍一块可以简单使用也可以复杂配置的自动重载工具air,为大家在go的开发过程中节约时间。
首先说说为什么需要热重载,在开发过程中反复的使用go run运行程序,然后在修改了代码之后又一次go run运行,随着每次修改完代码,再重复这个过程,这样的开发方式会浪费大家很多的时间;又或者使用一些框架内置的自动重载有不能满足复杂的需求或是你使用的框架根本就没有内置自动重载工具。
那么就非常推荐你使用这款自动重载工具进行go语言的开发。
在使用air进行开发的过程中我们只需要执行一次air命令,开发过程中在我们修改了代码后,它会自动检测文件是否变更,随后会进行编译和重新运行。
我们先看看它有哪些特点:
- 彩色的日志输出
- 自定义构建或必要的命令
- 支持外部子目录
- 在 Air 启动之后,允许监听新创建的路径
- 更棒的构建过程
如果你只是想配置构建命令和运行命令,您可以直接使用以下命令,而无需配置文件:
air --build.cmd "go build -o bin/api cmd/run.go" --build.bin "./bin/api"
下来我们来看看如何安装它
官方推荐的方式
# binary 文件会是在 $(go env GOPATH)/bin/air
curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin
# 或者把它安装在 ./bin/ 路径下
curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s
air -v
但是这种方式windows无法安装的
我更推荐使用go install进行安装,但要注意air目前的最新版本需要go>=1.22
go install github.com/cosmtrek/air@latest
安装成功后我们就可以在项目目录直接使用air命令来启动项目了
那它又如何进行高级配置呢?前面说到了它可以通过命令参数的形式来指定编译命令等一些参数,但这毕竟还是不方便.接下来我们来看看air的配置文件.
首先需要初始化一个默认的配置文件,在项目目录使用如下命令初始化配置文件
air init
随后这个目录会创建一个.air.toml的配置文件,在这个文件中就有air都有哪些选项可供配置
我翻译了一份默认的配置文件供大家参考(我使用的air v1.51.0,不同版本配置文件可能会有所不同)
# Config file for [Air](https://github.com/cosmtrek/air) in TOML format
# 工作目录设置,可以设置为"."当前目录或者一个绝对路径
root = "." # 默认当前目录
tmp_dir = "tmp" # 临时文件夹
[build] # 编译配置
# 在每次构建前运行的命令数组
pre_cmd = ["echo 'hello air' > pre_cmd.txt"]
cmd = "go build -o ./tmp/main ." # 使用Go编译命令
# 建立后运行的命令数组
post_cmd = ["echo 'hello air' > post_cmd.txt"]
bin = "tmp/main" # 构建后的可执行文件
full_bin = "APP_ENV=dev APP_USER=air ./tmp/main" # 设置环境变量运行的完整命令,例如加上 'APP_NAME' 等
args_bin = ["hello", "world"] # 命令行参数
include_ext = ["go", "tpl", "tmpl", "html"] # 监听的文件扩展名
exclude_dir = ["assets", "tmp", "vendor", "frontend/node_modules"] # 排除的目录
include_dir = [] # 自定义要监控的文件夹
include_file = [] # 需要特别关注的单个文件
exclude_file = [] # 排除文件
exclude_regex = ["_test\\.go"] # 排除特定正则表达式匹配的文件
exclude_unchanged = true # 如果文件未变化,不重新构建
follow_symlink = true # 确保跟踪符号链接
log = "air.log" # 输出日志文件位置,如果为目录,则在该目录下生成
poll = false # 是否使用fsnotify自动检测文件变化,默认不开启
poll_interval = 500 # 检测间隔,单位为毫秒,最小值默认
delay = 0 # 如果频繁触发构建,延迟执行时间
stop_on_error = true # 建立错误时强制停止旧的运行进程
send_interrupt = false # 是否发送中断信号(Windows不支持)
kill_delay = 500 # 发送中断后等待的延迟时间,单位纳秒
rerun = false # 若出现错误是否重新执行
rerun_delay = 500 # 重新执行的延迟时间,单位毫秒
[log] # 日志配置
time = false # 是否显示日志时间戳,默认关闭
main_only = false # 只显示主进程的日志,关闭其他监听器的输出
[color] # 配色方案
main = "magenta" # 主命令颜色
watcher = "cyan" # 监控器颜色
build = "yellow" # 构建器颜色
runner = "green" # 运行器颜色
[misc] # 其他设置
clean_on_exit = true # 关闭时删除tmp目录
[screen] # 屏幕配置
clear_on_rebuild = true # 重建时清除屏幕内容(如果适用)
keep_scroll = true # 保持滚动条状态
比如我要使用swag在每次编译项目之前生成swagger文档,我就可以修改
pre_cmd = ["swag init"]
有了这个配置文件,go的自动重载工具air就体现出它的灵活和强大了。
关于air的详细介绍大家可以移步至官方文档: air/README-zh_cn.md at master · cosmtrek/air · GitHub
本文暂时没有评论,来添加一个吧(●'◡'●)