Golang:使用 air 热重启

Go开发者必备:Air热重载工具详解与实战 热重载是现代开发流程中的关键技术,通过监控文件变更自动重建应用,显著提升开发效率。在Go生态中,Air作为专为Golang设计的工具,相比通用方案能更好处理模块依赖和构建过程。其核心原理基于文件系统监听和智能重建触发,特别适合Gin、Echo等Web框架开发场景。通过TOML配置可自定义监控规则、构建命令和延迟策略,与Docker的集成更便于创建一致的开发环境。实际应用中,合理设置include_ext和exclude_dir能优化大型项目性能,而kill_on_delay等参数可解决端口占用等常见问题。 阅读详情

前言

在 Web 开发中,热重启在很多地方都会用到,它能极大提升开发效率,在我们修改完代码后保存,就能自动重启运行得到最新的代码的运行结果,比如前端开发的 HMR 就是一个典型的例子。

Go 语言中的热重启

在 Go 语言开发中实现热重启,推荐使用 air ,自 Go1.4 出来,官方就推荐使用 Go Modules 管理依赖,来进行模块化开发,那么我们就使用 Go Modules 构建我们的项目(注意:我使用的版本是 Go1.3)。首先创建一个项目目录如: go-restart ,然后进入目录,在该目录下执行终端命令初始化 Go Modules:

go mod init github.com/startdusk/go-restart

注意 github.com/startdusk/go-restart 只是一个模块名,你可以把它命名成其他的命名

然后就会在目录下生成一个 go.mod 文件

然后我们安装 air (注意:还是在当前目录下执行)

go get -v -u github.com/cosmtrek/air

安装完成后,在终端执行 air ,有一下输出即为安装成功:

我们先创建一个 main.go 文件,写点简单代码:

// main.go
package main

import "fmt"

func main() {
    fmt.Println("air test")
}

到这里,我们还需要创建一个 .air.conf 的配置文件(.air.conf 是默认命名)。可以从 air 项目中的 air_example.conf 复制配置内容,进行一些修改。
有几个要注意的地方:

  • 1.[build] 下的 cmd 配置默认是 go build -o ./tmp/main .,很可能你需要修改,比我当前的项目就必须修改为 go build -o ./tmp/main github.com/startdusk/go-restart/main.go
  • 2.include_ext 和 exclude_dir 是配置避免监控不必要的文件和目录
  • 3.如果该项目有版本管理如 git ,要把 tmp 目录加入 .gitignore 中(因为运行 air 会生成的文件放在 tmp 文件夹中)
  • 4.如果出现 watch error, open tool many files…,说明要监控的文件太多,一方面确保修改了了 include_ext 和 exclude_dir,另一方面可以通过 ulimit -n 5000 调大进程允许打开的文件数

那么修改后的 .air.conf 文件就变为了:

# Config file for [Air](https://github.com/cosmtrek/air) in TOML format

# Working directory
# . or absolute path, please note that the directories following must be under root.
root = "."
tmp_dir = "tmp"

[build]
# Just plain old shell command. You could use `make` as well.
cmd = "go build -o ./tmp/main github.com/startdusk/go-restart/main.go"
# Binary file yields from `cmd`.
bin = "tmp/main"
# Customize binary.
full_bin = "APP_ENV=dev APP_USER=air ./tmp/main"
# Watch these filename extensions.
include_ext = ["go", "tpl", "tmpl", "html"]
# Ignore these filename extensions or directories.
exclude_dir = ["assets", "tmp", "vendor", "frontend/node_modules"]
# Watch these directories if you specified.
include_dir = []
# Exclude files.
exclude_file = []
# It's not necessary to trigger build each time file changes if it's too frequent.
delay = 1000 # ms
# Stop to run old binary when build errors occur.
stop_on_error = true
# This log file places in your tmp_dir.
log = "air_errors.log"

[log]
# Show log time
time = false

[color]
# Customize each part's color. If no color found, use the raw app log.
main = "magenta"
watcher = "cyan"
build = "yellow"
runner = "green"

[misc]
# Delete tmp directory on exit
clean_on_exit = true

此时目录结构为:

好了,到此我们可以在命令行运行代码:

air

然后输出:

程序成功运行,并且 air 在监听文件的变化,那我们尝试下改动下代码:

// main.go
package main

import "fmt"

func main() {
    fmt.Println("air test")
    fmt.Println("air listen")
}

然后控制台输出:

查看结果,air 成功监听到了文件的变化,并重新运行了程序。

那么,上面的粉红色的输出一些异常,大家可以去看一下这个 issue #53,windows 平台会出现这个问题,但不是很影响使用。但这个 air 目前还不能配合 VSCode 热重启加调试模式使用(如 nodejs 的 nodemon+VSCode 是可以实现热重启加调试模式启动的),有点遗憾。

Okteto:在Kubernetes上实现本地化开发体验的云原生方案 Kubernetes作为云原生运行时标准,其声明式、容器化特性极大提升了应用部署与运维效率,但传统开发流程(构建镜像→推送→部署→调试)导致高频迭代严重受阻。Okteto通过将本地开发环境‘逻辑接入’K8s集群,以双向文件同步、原生资源注入(Secret/ConfigMap)、端口转发与进程热重载为核心机制,重构了Edit-Build-Run-Debug闭环。它不模拟K8s,也不绕过API Server,而是基于Kubernetes原语构建可审计、低侵入的开发代理,显著降低Go微服务、多服务联调及新人上手门 阅读详情

相关推荐

XDMA 驱动安装与性能测试全流程解析

本文详细解析了XDMA驱动的完整安装与性能测试流程。从环境准备、源码获取、编译安装到驱动加载与设备验证,逐步指导用户打通FPGA加速卡与主机间的高速数据通道。重点介绍了如何通过官方测试脚本进行功能验证与带宽性能测试,帮助用户评估XDMA驱动的实际传输效能,为AI推理、高频交易等低延迟高带宽应用奠定基础。

weixin_29216049的博客 525

golang代码热加载,热更新库air库实践

golang代码热加载,热更新库air库实践

qq_32421489的博客 2265

第二十七届华东杯数学建模A 题 跳台滑雪问题 完整思路模型及代码

考虑到滑行过程中的空气阻力和摩擦力对速度的影响,我们引入了不同姿态下运动员迎风面积和空气阻力系数的变化,利用牛顿第二定律建立加速度表达式,并通过数值模拟比较常见姿态下的终端速度。针对问题二,我们构建了二维空中飞行动力学模型,结合起跳速度、身体迎角、滑雪板倾角等因素,模拟运动员在空中飞行的轨迹与姿态变化,采用欧拉法对运动过程进行仿真,优化飞行路径和稳定性。仿真结果表明,运动员应在起跳后保持滑雪板与身体成“V”字形打开、重心略后倾的姿态,以增强升力、延长飞行距离并提高姿态得分。,并模拟出跳跃的轨迹和最终得分。

lichensun的博客 3209

Air:Go热重载工具

Air 是一个 Go 项目的热重载工具,作用是在你修改代码文件后自动重新编译并重启程序,从而大幅提升开发效率,避免手动重启程序的繁琐操作。

gopher123的博客 1394

IC618新手避坑指南:从零在Linux上配置Cadence Virtuoso环境(含cds.lib文件详解)

本文详细介绍了在Linux系统上配置Cadence Virtuoso IC618环境的完整指南,特别针对新手常见问题提供解决方案。重点解析了cds.lib文件的关键配置,包括库路径定义和工艺库管理,并分享了高效工作流设置和典型问题排查技巧,帮助工程师快速搭建稳定的EDA设计环境。

weixin_26805597的博客 556

华为eNSP Pro实战:NE/CE设备SSH远程配置避坑指南

本文针对华为eNSP Pro用户在模拟多台NE路由器或CE交换机时遇到的浏览器卡顿问题,提供了详细的SSH远程配置避坑指南。通过对比浏览器与SSH客户端的资源占用和操作体验,文章详细阐述了为NE和CE设备配置SSH服务的关键步骤、命令差异及常见错误排查方法,旨在帮助用户提升实验效率,实现稳定高效的远程管理。

weixin_29196891的博客 223

golang在 windows操作系统下使用 air

具体安装教程。

小熙的博客 933

无人机精准降落辅助系统核心技术解析

接近地面时(<10米)切换至基于图像的视觉伺服(IBVS),依据图像特征点偏移(如靶标图案、LED标记)微调姿态,消除位置累积误差。通过SRUKF(平方根无迹卡尔曼滤波) 算法融合三类数据,输出6自由度位姿估计(精度达厘米级),抑制单一传感器噪声。权值根据信噪比动态调整。模型预测控制(MPC):针对斜坡降落,构建包含平台倾角、风扰的动力学方程,滚动求解最优油门序列。动态照明适配:针对夜间或低光照场景,系统向降落平台发送亮度调节指令,如增强红外信标强度或调整可见光LED阵列,确保特征识别鲁棒性。

YUNZHUO666的博客 1696

记录第一次使用air热更新golang项目

1.不要去下载1.12.4那个版本,我之前按照网上博客去下了这个版本,报Setctty set but Ctty not valid in child。编译完成后当前目录下会生成air的可执行文件(绿色那个就是),我们把它配置到环境变量中,方便之后我们在项目中使用air的相关命令。2.下载的时候还有可能会提示你Golang版本低了,自己去下载需要的版本就行。就会生成tmp文件夹,里面有新生成的main文件。到这里就完成了,可以在全局使用air相关命令了。关于air,还可以参考李文周老师的。

QH_WYH的博客 1327

open-mmlab / mmpose安装、使用教程

mmpose安装、使用教程mmpose安装教程1. 安装mmcv-full2. 安装MMPose2. 安装mmdet使用教程1. 预测图片2. 预测视频 mmpose mmpose是商汤旗下有又一款好用的工具箱,主要是针对姿态识别任务开发的,包括人体姿态识别和动物姿态识别。里面继承很多现成的网络可以供大家使用,并且提供了训练好的权重。用户可以更具自己的需求训练自己的数据,或者直接应用他们的结果,反正就是很全面啦!!!! github连接:https://github.com/open-mmlab/mmpos

CharmsLUO的博客 1万+

解决Android 14兼容性问题:NDK中arm64-v8a的正确配置方法

本文详细解析Android 14系统架构变化对NDK开发的影响,重点介绍arm64-v8a架构的正确配置方法。针对常见的兼容性问题如so库缺失、ABI不匹配等提供解决方案,并分享性能优化与自动化测试实践,助力开发者高效适配Android 14设备。

algae的博客 1223

【golang】golang项目热重启【air】

今天在github上找到个golang热重启的插件,可以用在golang的各种框架中 1.下载安装 go get -u github.com/kataras/rizla 2.使用rizla插件,注意:rizla创建的文件名是根据项目的文件名创建,所以项目名称一定要跟go.mod的module名称要一致 #简单使用rizla启动golang项目 rizla main.go 详细的其他步骤请看rizla文档 https://github.com/kataras/rizla 个人网站:https://www.

我的开源项目:https://gitee.com/derekgo/vue-cms_xg 1305

计量经济学tempdisagg的python库:年度时序变月度

计量经济学tempdisagg的python库:年度时序变月度

素质云笔记 1529

air热重启配置相关问题总结

在配置热重启air的时候,一直配置不成功,具体的配置过程gin官方文档里介绍的非常清楚我就不再赘述,具体可以参考一下网址: 使用Air实时加载gin项目 我只说一下我遇到的问题 windows用户需要把 APP_ENV=dev APP_USER=air ./tmp/main 改为: set APP_ENV=dev && set APP_USER=air && /path/to/tmp/main.exe 2. 注意: 这里的是: cmd ="go build -o

qq_47664976的博客 760

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

zsh: command not found: air

背景 利用air(git)实现go项目的热重启,关于air的介绍不再赘述。 在Mac安装air后,仍然不能正常使用,并且报错,如本博客标题所示。 后来经过探索,找到解决方案。 先上解决方案 配置Mac下的.zshrc文件,在最后添加语句 alias air='$(go env GOPATH)/bin/air' 原理分析 .zshrc文件是Mac终端命令的配置文件(个人暂时的理解) 安装air后,安装在GOPATH的bin目录下,而报错是因为在终端执行air命令,终端找不到对应文件(这个文件地址要说明给z

止水 1552

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

go 项目开发热加载

六种热加载方法 https://www.jianshu.com/p/d7916f21d38c go 使用 fresh 实现热重启、 https://blog.youkuaiyun.com/sss996/article/details/94722479 go 使用 air 实现热重启 https://www.liwenzhou.com/posts/Go/live_reload_with_air/ # 注意 Windows下 使用 需要 安装包之后 需要进入包的安装目录 如:E:\code\go\pk..

hllyzms的博客 2253

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

用 air 给 Golang/Gin 框架提供热重启支持

来源:https://www.jianshu.com/p/ebf01fde992e

天空之城 1587

goland服务热重启

开发web api或web项目,修改源码后,无需手动重启即可查看效果,使用air即可实现。 安装air:go get -v -u github.com/cosmtrek/air(或下载所有源码后,go build,得到air.exe,拷贝到$gopath/bin目录) 在项目目录下,创建.air.config文件,修改[build]中的cmd配置,设置为goland编译程序的命令行命令: cmd = "go build -o ./tmp/beego-demo.exe ./main.go" 最终配置

henreash的专栏 1768

Golang:使用air实现gin应用的live reload热重载

尝试修改文件,等待片刻后,刷新页面,就会发现页面内容已经更新了。热重载 Go 应用的工具。

彭世瑜的博客 1606

landrunner服务器正在运行,goland服务怎么利用配置文件进行热重启

goland服务怎么利用配置文件进行热重启发布时间:2020-12-04 15:29:16来源:亿速云阅读:89作者:Leah这篇文章给大家介绍goland服务怎么利用配置文件进行热重启,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。开发web api或web项目,修改源码后,无需手动重启即可查看效果,使用air即可实现。安装air:go get -v -u github.co...

weixin_31905417的博客 312

Go项目热重启工具

安装 go get -u github.com/cosmtrek/air 创建配置文件 在项目根目录创建一个名为 .air.conf 的配置文件。创建完毕之后,在文件中写入你应用运行的命令如: go build main.go 运行项目只需要在项目根目录执行如下命令: air -c .air.conf 如果你的配置文件是 .air.conf 那么你只需要运行 air 就可以了。 项目运行后,我们再次编辑项目中的文件,项目的服务会自动重启了。 ...

顾鸢的博客 372

Golang笔记和小坑记录

下载:gogetgithub.com/air-verse/air(前身是这个github.com/cosmtrek/air,废弃了)参考:https://www.jianshu.com/p/f85ecae6e7df。安装:goinstallgithub.com/air-verse/air。c.abort()+return:立即终止当前中间件函数和后续中间件。c.Abort():终止后续中间件,但是当前中间件函数会执行完。c.Next():立即交出当前中间件函数控制权。运行:运行命令"air"

云吞煲仔牛腩河的博客 447

gin的热启动方案-air

使用gin搭建服务的时候,在开发环境修改代码,要关闭服务,再重新打开代码才能生效。频繁修改再打开是一个很低效的事情。所以需要一个工具,在修改完代码之后可以热启动。可以使用来完成。

majiayu000的博客 1794

告别频繁重启!Docker Compose热重载与即时反馈全攻略

你是否还在为修改代码后反复执行`docker-compose down && docker-compose up`而抓狂?是否因等待容器重启而打断开发思路?Docker Compose的`watch`功能彻底解决了这一痛点,让开发效率提升300%!本文将带你掌握这一革命性工具,实现代码变动即时生效的流畅开发体验。 读完本文你将获得: - 5分钟上手热重载配置的实操指南 - 3种文件变更响应策略的...

gitblog_00249的博客 433

Go语言学习笔记——golang web项目热部署air库的使用

热部署air

qq_39280718的博客 1971

go 热重载工具air

go 热重载工具 air 的使用

技术的搬运工 646
上一篇: Golang:BasicAuth + JWT 校验用户权限
下一篇: SpringBoot:使用 @Lazy 注解懒加载
HTK217
博客等级 码龄9年 0粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值