gin使用Air实时加载

Air能够实时监听项目的代码文件,在代码发生变更之后自动重新编译并执行,大大提高gin框架项目的开发效率。

1. 为什么需要实时加载?

之前使用Python编写Web项目的时候,常见的Flask或Django框架都是支持实时加载的,你修改了项目代码之后,程序能够自动重新加载并执行(live-reload),这在日常的开发阶段是十分方便的。

在使用Go语言的gin框架在本地做开发调试的时候,经常需要在变更代码之后频繁的按下Ctrl+C停止程序并重新编译再执行,这样就不是很方便。

2. Air介绍

怎样才能在基于gin框架开发时实现实时加载功能呢?像这种烦恼肯定不会只是你一个人的烦恼,所以我报着肯定有现成轮子的心态开始了全网大搜索。果不其然就在Github上找到了一个工具:Air[1]。它支持以下特性:

  • 彩色日志输出
  • 自定义构建或二进制命令
  • 支持忽略子目录
  • 启动后支持监听新目录
  • 更好的构建过程

3. 安装Air

Go

这也是最经典的安装方式:

复制代码
    go get -u github.com/cosmtrek/air
MacOS
复制代码
    curl -fLo air https://git.io/darwin_air
Linux
复制代码
    curl -fLo air https://git.io/linux_air
Windows
复制代码
    curl -fLo air.exe https://git.io/windows_air
Dcoker
复制代码
docker run -it --rm \
    -w "<PROJECT>" \
    -e "air_wd=<PROJECT>" \
    -v $(pwd):<PROJECT> \
    -p <PORT>:<APP SERVER PORT> \
    cosmtrek/air
    -c <CONF>

然后按照下面的方式在docker中运行你的项目:

复制代码
docker run -it --rm \
    -w "/go/src/github.com/cosmtrek/hub" \
    -v $(pwd):/go/src/github.com/cosmtrek/hub \
    -p 9090:9090 \
    cosmtrek/air

4. 使用Air

为了敲命令更简单更方便,你应该把alias air='~/.air'加到你的.bashrc.zshrc中。

首先进入你的项目目录:

复制代码
    cd /path/to/your_project

最简单的用法就是直接执行下面的命令:

复制代码
# 首先在当前目录下查找 `.air.conf`配置文件,如果找不到就使用默认的
air -c .air.conf

推荐的使用方法是:

复制代码
# 1. 在当前目录创建一个新的配置文件.air.conf
touch .air.conf

# 2. 复制 `air.conf.example` 中的内容到这个文件,然后根据你的需要去修改它

# 3. 使用你的配置运行 air, 如果文件名是 `.air.conf`,只需要执行 `air`。
air
air_example.conf示例

完整的air_example.conf示例配置如下,可以根据自己的需要修改。

复制代码
# [Air](https://github.com/cosmtrek/air) TOML 格式的配置文件

# 工作目录
# 使用 . 或绝对路径,请注意 `tmp_dir` 目录必须在 `root` 目录下
root = "."
tmp_dir = "tmp"

[build]
# 只需要写你平常编译使用的shell命令。你也可以使用 `make`
cmd = "go build -o ./tmp/main ."
# 由`cmd`命令得到的二进制文件名
bin = "tmp/main"
# 自定义的二进制,可以添加额外的编译标识例如添加 GIN_MODE=release
full_bin = "APP_ENV=dev APP_USER=air ./tmp/main"
# 监听以下文件扩展名的文件.
include_ext = ["go", "tpl", "tmpl", "html"]
# 忽略这些文件扩展名或目录
exclude_dir = ["assets", "tmp", "vendor", "frontend/node_modules"]
# 监听以下指定目录的文件
include_dir = []
# 排除以下文件
exclude_file = []
# 如果文件更改过于频繁,则没有必要在每次更改时都触发构建。可以设置触发构建的延迟时间
delay = 1000 # ms
# 发生构建错误时,停止运行旧的二进制文件。
stop_on_error = true
# air的日志文件名,该日志文件放置在你的`tmp_dir`中
log = "air_errors.log"

[log]
# 显示日志时间
time = true

[color]
# 自定义每个部分显示的颜色。如果找不到颜色,使用原始的应用程序日志。
main = "magenta"
watcher = "cyan"
build = "yellow"
runner = "green"

[misc]
# 退出时删除tmp目录
clean_on_exit = true
相关推荐
不会聊天真君6473 天前
介绍(gin笔记第一期)
笔记·gin
ZHENGZJM4 天前
Server-Sent Events (SSE) 接口实现
架构·go·gin
ZHENGZJM4 天前
统一响应封装与 API 错误处理
react.js·go·gin
ZHENGZJM4 天前
仓库抓取与内容提取
go·gin
GDAL6 天前
gin.H 深入全面讲解
gin·h
呆萌很6 天前
【Gin】参数处理练习题
gin
GDAL6 天前
gin.Default() 深入全面讲解
golang·go·gin
GDAL7 天前
为什么选择gin?
golang·gin
ZHENGZJM11 天前
Gin 鉴权中间件设计与实现
中间件·gin
ZHENGZJM11 天前
认证增强:图形验证码、邮箱验证与账户安全
安全·react.js·go·gin