简介:

air是Go的热加载工具,它可以监听文件或者目录的变化,自动编译,重启程序,提高开发的工作效率。

场景:

在代码修改后需要通过ctrl+c来停止项目,go run的方式来再次重启项目,在开发进行中频繁操作会很麻烦,很影响开发的效率,air刚好解决了这种问题

Air的特性:

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

安装方式:

1、Go最原始的安装方法,但是配置文件会容易出问题:

go get -u github.com/cosmtrek/air

2、使用go install安装方法:

需要配置.bashrc.zshrcalias air='$(go env GOPATH)/bin/air'

source ~/.zshrc

使用 Go 的版本为 1.16-1.23(不包括1.23)

go install github.com/cosmtrek/air@v1.40.4

使用 Go 的版本为 1.23或更高(推荐此方法)

go install github.com/air-verse/air@latest

3、推荐使用 install.sh,但是博主本人使用的是第二种方式

# 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

4、Docker的安装方式

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

使用方式(同官网的使用方式):

首先,进入你的项目文件夹

cd /path/to/your_project

最简单的方法是执行

# 优先在当前路径查找 `.air.toml` 后缀的文件,如果没有找到,则使用默认的
air -c .air.toml

您可以运行以下命令初始化,把默认配置添加到当前路径下的.air.toml 文件。

air init

在这之后,你只需执行 air 命令,无需添加额外的变量,它就能使用 .air.toml 文件中的配置了。

air

如欲修改配置信息,请参考 air_example.toml 文件.

运行时参数

# 会执行 ./tmp/main bench
air bench # 会执行 ./tmp/main server --port 8080
air server --port 8080

可以使用 -- 参数分隔为 air 命令传递的参数和构建的二进制文件。

# 会运行 ./tmp/main -h
air -- -h # 会使用个性化配置来运行 air,然后把 -h 后的变量和值添加到运行的参数中
air -c .air.toml -- -h

air_example.toml示例

完整的官网配置信息,根据需要修改。

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

# 工作目录
# 使用. 或绝对路径, 请注意以下目录tmp_dir必须在根目录root下。
root = "."
tmp_dir = "tmp" [build]
# 只需要写你平常编译使用的shell命令。也可以使用`make`
# Windows平台示例: cmd = "go build -o tmp\main.exe ."
cmd = "go build -o ./tmp/main ."
# 由`cmd`命令得到的二进制文件名
# Windows平台示例:bin = "tmp\main.exe"
bin = "tmp/main"
# 自定义执行程序的命令,可以添加额外的编译标识例如添加 GIN_MODE=release
# Windows平台示例:full_bin = "tmp\main.exe"
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 = []
# 忽略符合通过正则匹配到的文件
exclude_regex = ["_test\\.go"]
# 忽略未进行修改的文件
exclude_unchanged = true
# 按照目录的符号链接
follow_symlink = true
# 这个日志文件放在你的`tmp_dir`中
log = "air.log"
# 如果文件更改过于频繁,则没有必要在每次更改时都触发构建。可以设置触发构建的延迟时间/毫秒
delay = 1000 # ms
# 发生构建错误时,停止运行旧的二进制文件
stop_on_error = true
# 杀死进程前发送中断信号(Windows不支持)
send_interrupt = false
# 发送中断信号后延迟时间/毫秒
kill_delay = 500 # ms
# 在运行二进制文件时添加额外的参数 (bin/full_bin)。将运行“./tmp/main hello world”
args_bin = ["hello", "world"] [log]
# 显示日志时间
time = false [color]
# 自定义每个部分的颜色。如果未找到颜色,请使用原始应用程序日志。
main = "magenta"
watcher = "cyan"
build = "yellow"
runner = "green" [misc]
# 退出时删除 tmp 目录
clean_on_exit = true

至此按照使用方法先执行:air init

然后执行:air

热加载就启动了

调试

运行 air -d 命令能打印所有日志。

遇到 "command not found: air" 或 "No such file or directory"

export GOPATH=$HOME/xxxxx
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
export PATH=$PATH:$(go env GOPATH)/bin <---- 请确认这行在您的配置信息中!!!

部署

请注意:这需要 Go 1.16+ ,因为使用 go mod 来管理依赖。

# 1. 先fork项目

# 2. 然后克隆clone下来
mkdir -p $GOPATH/src/github.com/cosmtrek
cd $GOPATH/src/github.com/cosmtrek
git clone git@github.com:<YOUR USERNAME>/air.git # 3. 切换路径安装依赖
cd air
make ci # 4. 这样就可以使用了!
make install

Air实现Go程序的热重载(热加载)的更多相关文章

  1. mysql 5.6 后热数据的加载

    mysql 5.6 后热数据的加载 转自:http://blog.itpub.net/20892230/viewspace-2127469/ 故障现象:在数据库重启后,碰巧遇到业务高峰期,连接数满,导 ...

  2. Unity3d热更新全书-加载(一)从AssetBundle说起

    Unity3D动态下载资源,有没有解?有,AssetBundle就是通用解,任何一本书都会花大幅篇章来介绍AssetBundle. 我们也来说说AssetBundle 我们试全面的分析一下Unity3 ...

  3. tensorflow学习笔记2:c++程序静态链接tensorflow库加载模型文件

    首先需要搞定tensorflow c++库,搜了一遍没有找到现成的包,于是下载tensorflow的源码开始编译: tensorflow的contrib中有一个makefile项目,极大的简化的接下来 ...

  4. 如何在小程序实现图片lazy-load懒加载效果

    自从跳一跳出现之后小程序又开始频繁出现了,在学习过程中发现小程序虽然好但是由于api不完善导致开发过程中有很多的坑,重点是网上相对小程序出现坑时解决方案显然比较少,小程序最让人觉得痛心疾首之一就是无法 ...

  5. 微信小程序中使用ECharts 异步加载数据 实现图表

    <!--pages/bar/index.wxml--> <view class="container"> <ec-canvas id="my ...

  6. 解决WP程序 重复打开出现 “正在加载...” 字样 解决方案

    在开发winphone程序时候 我们经常遇到调试.在调试的时候 可能会重复打开 debug一下.可是有时候 经常遇到 "正在加载...."字样.而且很慢.效率很低. 测试发现 在 ...

  7. 微信小程序 scroll-view 完成上拉加载更多

    我们经常在软件客户端上看到这么一个功能,当我们阅读信息浏览到文章的末尾时,通常会加载出更多的信息.比如,我们在简书客户端上浏览推荐文章时,浏览到屏幕的末尾,此时又加载出了另一页的推荐文章,即实现了上拉 ...

  8. Unity3d热更新全书-加载(二)如何在不用AssetBundle的前提下动态加载预设

    Unity3D的主要构成大家都知道,首先是场景图,场景图上的节点构成一颗树. 每个节点对应一个GameObject对象 然后每个GameObject有若干个组件 有一些组件会与资源产生关系,比如Mes ...

  9. Android RocooFix热修复动态加载框架介绍

    RocooFix Another hotfix framework 之前的HotFix项目太过简单,也有很多同学用Nuwa遇到很多问题,作者也不再修复,所以重新构建了一套工具. Bugfix 2016 ...

  10. 热更新--动态加载framework

    1.准备工作:先自己封装一个framework:http://www.cnblogs.com/sunjianfei/p/5781863.html 2.把封装好的framework压缩成zip,放到本地 ...

随机推荐

  1. 秒懂Redis

    一.redis简介 Redis 是C语言开发的一个开源高性能键值对的内存数据库,可以用来做数据库.缓存.消息中间件等场景,是一种NoSQL(not-only sql,非关系型数据库)的数据库 二.Re ...

  2. 从零开始学java(第二天)

    ------------恢复内容开始------------ 今天是学习了一些基础的知识 1.注释 //行注释 /*多行注释*/ /**文档注释*/ 2.标识符和关键字 标识符就是名字,类名方法名变量 ...

  3. windows 上部署 kafka 做测试

    1.下载 需要下载 zookeeper 和kafka 我下载的版本是 2.部署 2.1 部署 zookeeper 2.1.1 新建配置文件 zoo.cfg 内容为 tickTime = 2000 da ...

  4. Git 克隆部分文件

    使用 sparse-checkout (推荐) git clone \ -b master \ --depth=1 \ --filter=blob:none \ --sparse \ <repo ...

  5. 《前端运维》一、Linux基础--12网络

    这是linux部分的最后一篇内容,我们一起来学习下Linux网络. 我们先看些命令吧: ifconfig,查看与配置网络状态. netstat,查询网络状态,常用选项如下: -t,列出TCP协议端口 ...

  6. 树莓派下,打包发布能在树莓派中运行的Qt5程序和其运行环境

    目标:把Qt程序部署到新的树莓派中. 平台:树莓派 工作:把Qt程序和运行环境分别打包 一.程序打包过程如下,仅供参考: 1.新建文件夹A,把程序拷贝到文件夹中. 2.使用ldd获取依赖关系,并复制到 ...

  7. 深入理解 HTTP 协议:从基础到实践全解析

    在当今数字化时代,HTTP 协议如同互联网世界的"语言",支撑着无数网页浏览.数据传输和在线交互.无论你是初涉编程的新手,还是经验丰富的开发者,深入掌握 HTTP 协议都至关重要. ...

  8. 【Linux】【虚拟机】 IP地址的动态与静态设置

    目录 配置文件的修改 配置文件的修改 vim /etc/sysconfig/network-scripts/ifcfg-ens33 IP配置方式(不指定:none,静态:static,动态:dhcp) ...

  9. 【MyBatis】学习笔记09:动态设置表名

    [Mybatis]学习笔记01:连接数据库,实现增删改 [Mybatis]学习笔记02:实现简单的查 [MyBatis]学习笔记03:配置文件进一步解读(非常重要) [MyBatis]学习笔记04:配 ...

  10. gdb 初次运行卡住 Starting program: [New Thread 0x1103 of process 843]

    安装完后gdb一般会有提示: ==> gdbgdb requires special privileges to access Mach ports.You will need to codes ...