gin使用Air实时加载

这篇具有很好参考价值的文章主要介绍了gin使用Air实时加载。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

当修改了项目代码之后,程序能够自动重新加载并执行(live-reload),这在日常的开发阶段是十分方便的。

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

2. Air特性

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

3. 安装Air

3.1 通过Go安装air
    go get -u github.com/cosmtrek/air
3.2 编译air生成命令

不知道3.1安装的air在什么地方,可以通过下面命令查看位置,找到GOPATH

C:\Users\leell>go env
set GOPATH=C:\Users\leell\go

现在就可以进去找air,并且编译生成工具air.exe,我的开发环境是windows,如果你想编译其它平台的执行命令自行设置编译平台。beego的安装及bee工具的使用-CSDN博客

C:\Users\leell\go\pkg\mod\github.com\cosmtrek\air@v1.49.0>go build
go: downloading golang.org/x/sys v0.5.0
go: downloading github.com/pelletier/go-toml/v2 v2.0.6

将上面生成的air.exe移动到GOPATH/bin,然后查看命令信息。

C:\Users\leell\go>air -v

  __    _   ___
 / /\  | | | |_)
/_/--\ |_| |_| \_ (devel), built with Go go1.21.6

提示:我是在我的环境变量PATH配置了GOPATH/bin的,注意不要忘了。

4.开始使用Air

上面的准备工作已经做足了,现在就可以开始继续真正的工作了。

进入你的项目中,如果你的项目中没有.air.conf,新建一个.air.conf空文件。

G:\github\go-cms>air -c .air.conf

  __    _   ___
 / /\  | | | |_)
/_/--\ |_| |_| \_ (devel), built with Go go1.21.6

watching .
watching api
watching api\v1
.......

执行过程中会报错,如果报错就执行下面的命令,安装需要的依赖包

go mod tidy

再次执使用air的命令

G:\github\go-cms>air -c .air.conf

  __    _   ___
 / /\  | | | |_)
/_/--\ |_| |_| \_ (devel), built with Go go1.21.6
....
running...
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET    /static/*filepath         --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (4 handlers)
[GIN-debug] HEAD   /static/*filepath         --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (4 handlers)
[GIN-debug] GET    /admin/*filepath          --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (4 handlers)
[GIN-debug] HEAD   /admin/*filepath          --> github.com/gin-gonic/gin.(*RouterGroup).createStaticHandler.func1 (4 handlers)
[GIN-debug] GET    /favicon.ico              --> gocms/routes.InitRouter.(*RouterGroup).StaticFile.func3 (4 handlers)
[GIN-debug] HEAD   /favicon.ico              --> gocms/routes.InitRouter.(*RouterGroup).StaticFile.func3 (4 handlers)
[GIN-debug] GET    /                         --> gocms/routes.InitRouter.func1 (4 handlers)
[GIN-debug] GET    /admin                    --> gocms/routes.InitRouter.func2 (4 handlers)
[GIN-debug] GET    /api/v1/admin/users       --> gocms/api/v1.GetUsers (5 handlers)
[GIN-debug] PUT    /api/v1/user/:id          --> gocms/api/v1.EditUser (5 handlers)
[GIN-debug] DELETE /api/v1/user/:id          --> gocms/api/v1.DeleteUser (5 handlers)
[GIN-debug] PUT    /api/v1/admin/changepw/:id --> gocms/api/v1.ChangeUserPassword (5 handlers)
[GIN-debug] GET    /api/v1/admin/category    --> gocms/api/v1.GetCate (5 handlers)
[GIN-debug] POST   /api/v1/category/add      --> gocms/api/v1.AddCategory (5 handlers)
[GIN-debug] PUT    /api/v1/category/:id      --> gocms/api/v1.EditCate (5 handlers)
[GIN-debug] DELETE /api/v1/category/:id      --> gocms/api/v1.DeleteCate (5 handlers)
[GIN-debug] GET    /api/v1/admin/article/info/:id --> gocms/api/v1.GetArtInfo (5 handlers)
[GIN-debug] GET    /api/v1/admin/article     --> gocms/api/v1.GetArt (5 handlers)
[GIN-debug] POST   /api/v1/article/add       --> gocms/api/v1.AddArticle (5 handlers)
[GIN-debug] PUT    /api/v1/article/:id       --> gocms/api/v1.EditArt (5 handlers)
[GIN-debug] DELETE /api/v1/article/:id       --> gocms/api/v1.DeleteArt (5 handlers)
[GIN-debug] POST   /api/v1/upload            --> gocms/api/v1.UpLoad (5 handlers)
[GIN-debug] GET    /api/v1/admin/profile/:id --> gocms/api/v1.GetProfile (5 handlers)
[GIN-debug] PUT    /api/v1/profile/:id       --> gocms/api/v1.UpdateProfile (5 handlers)
[GIN-debug] GET    /api/v1/comment/list      --> gocms/api/v1.GetCommentList (5 handlers)
[GIN-debug] DELETE /api/v1/delcomment/:id    --> gocms/api/v1.DeleteComment (5 handlers)
[GIN-debug] PUT    /api/v1/checkcomment/:id  --> gocms/api/v1.CheckComment (5 handlers)
[GIN-debug] PUT    /api/v1/uncheckcomment/:id --> gocms/api/v1.UncheckComment (5 handlers)
[GIN-debug] POST   /api/v1/user/add          --> gocms/api/v1.AddUser (4 handlers)
[GIN-debug] GET    /api/v1/user/:id          --> gocms/api/v1.GetUserInfo (4 handlers)
[GIN-debug] GET    /api/v1/users             --> gocms/api/v1.GetUsers (4 handlers)
[GIN-debug] GET    /api/v1/category          --> gocms/api/v1.GetCate (4 handlers)
[GIN-debug] GET    /api/v1/category/:id      --> gocms/api/v1.GetCateInfo (4 handlers)
[GIN-debug] GET    /api/v1/article           --> gocms/api/v1.GetArt (4 handlers)
[GIN-debug] GET    /api/v1/article/list/:id  --> gocms/api/v1.GetCateArt (4 handlers)
[GIN-debug] GET    /api/v1/article/info/:id  --> gocms/api/v1.GetArtInfo (4 handlers)
[GIN-debug] POST   /api/v1/login             --> gocms/api/v1.Login (4 handlers)
[GIN-debug] POST   /api/v1/loginfront        --> gocms/api/v1.LoginFront (4 handlers)
[GIN-debug] GET    /api/v1/profile/:id       --> gocms/api/v1.GetProfile (4 handlers)
[GIN-debug] POST   /api/v1/addcomment        --> gocms/api/v1.AddComment (4 handlers)
[GIN-debug] GET    /api/v1/comment/info/:id  --> gocms/api/v1.GetComment (4 handlers)
[GIN-debug] GET    /api/v1/commentfront/:id  --> gocms/api/v1.GetCommentListFront (4 handlers)
[GIN-debug] GET    /api/v1/commentcount/:id  --> gocms/api/v1.GetCommentCount (4 handlers)
[GIN-debug] Listening and serving HTTP on :3000

从上面的显示可以看出服务已经启动成功了,可以看出列举出了所有接口地址,所有监听的文件。

5.验证air实时加载情况

修改之前显示的提示

gin使用Air实时加载,gin从入门到实践,gin

修改之后:

utils\errmsg\errmsg.go has changed
building...
!exclude .git
!exclude .git
running...

将会重新加载文件,并且启动进程

gin使用Air实时加载,gin从入门到实践,gin

air_example.conf示例

完整的air_example.conf示例配置如下,可以根据自己的需要修改.air.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

参考文章:

https://www.fansimao.com/928949.html 文章来源地址https://www.toymoban.com/news/detail-809959.html

到了这里,关于gin使用Air实时加载的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 合宙Air724UG LuatOS-Air LVGL API控件-加载器(Spinner)

    加载器(Spinner) 通过  lvgl.spinner_create  就可创建一个加载器,本身自带动画效果。 可以通过  lvgl.spinner_set_arc_length  函数调整加载器的弧长。单位是度,一圈是按 360 度计算的。 通过  lvgl.spinner_set_spin_time  可以设置转速,这里的单位是 ms,是加载器转完一圈的时间,GIF 录制

    2024年02月09日
    浏览(40)
  • Gin 项目引入热加载

    目录 一、什么是热加载 二、Air 2.1 介绍 2.2 特性 特性: 2.3 相关文档 2.4 安装 推荐使用 install.sh 使用 go install 2.5 配置环境变量 2.6 使用 三、Fresh 3.1 介绍 3.2 相关文档 3.3 安装与使用 四、bee 4.1 介绍 4.2 相关文档 4.3 安装与使用 4.4 基本命令 五、gowatch 5.1 介绍 5.2 相关文档 5.3 安

    2024年02月03日
    浏览(39)
  • Gin安装解决国内go 与 热加载

     get 方式安装超时问题,国内直接用官网推荐的下面这个命令大概率是安装不成功的 可以在你的项目目录下执行下面几个命令: 比如我的项目在E:Oprojectzl  cmd  E:Oprojectzl就在目录下执行 这样就能将 gin以module的方式安装到你的项目的Lib里面了。 如果执行完上面的命令没报

    2024年02月12日
    浏览(45)
  • Go语言工程实践之测试与Gin项目实践

    回归 测试 一般是QA(质量保证)同学 手动通过终端回归一些固定的主流程 场景 集成 测试 是对 系统功能维度做测试验证 ,通过服务暴露的某个接口,进行自动化测试 而 单元 测试 开发阶段,开发者 对单独的函数、模块做功能验证 层级从上至下, 测试成本逐渐减低 ,而测试 覆

    2024年02月13日
    浏览(48)
  • 基于Gin框架的HTTP接口限速实践

    在当今的微服务架构和RESTful API主导的时代,HTTP接口在各个业务模块之间扮演着重要的角色。随着业务规模的不断扩大,接口的访问频率和负载也随之增加。为了确保系统的稳定性和性能,接口限速成了一个重要的话题。 1 接口限速的使用场景 接口限速的使用场景主要涉及以

    2024年02月10日
    浏览(35)
  • WinUI(WASDK)使用HelixToolkit加载3D模型并进行项目实践

    本人之前开发了一个叫电子脑壳的上位机应用,给稚晖君ElectronBot开源机器人提供一些功能,但是由于是结合硬件才能使用的软件,如果拥有硬件的人员太少,就会导致我的软件没什么人用,于是我就想着能不能将机器人硬件的模型加载到软件里,这样用户就可以不使用硬件

    2024年02月08日
    浏览(61)
  • WinUI(WASDK)使用HelixToolkit加载机器人3D模型并进行项目实践

    本人之前开发了一个叫电子脑壳的上位机应用,给稚晖君ElectronBot开源机器人提供一些功能,但是由于是结合硬件才能使用的软件,如果拥有硬件的人员太少,就会导致我的软件没什么人用,于是我就想着能不能将机器人硬件的模型加载到软件里,这样用户就可以不使用硬件

    2024年02月08日
    浏览(158)
  • 【Gin框架】框架入门

    Gin 是一个Go (Golang) 编写的轻量级 http web 框架,运行速度非常快,如果你是性能和高效的追求者,我们推荐你使用Gin 框架。 Gin 最擅长的就是Api 接口的高并发,如果项目的规模不大,业务相对简单,这个时候我们也推荐您使用Gin。 当某个接口的性能遭到较大挑战的时候,这个

    2024年02月02日
    浏览(112)
  • Gin 框架入门实战系列(一)

    Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点 对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的 net/http 足够简单,性能也非常不错 借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团

    2024年02月11日
    浏览(33)
  • Gin 框架介绍与快速入门

    目录 Gin 框架介绍与快速入门 一、Gin框架介绍 1. 快速和轻量级 2. 路由和中间件 3. JSON解析 4. 支持插件 5. Gin相关文档 二、基本使用 1.安装 2.导入 3.第一个Gin 应用 三、应用举例 四、Gin 入门核心 1.gin.Engine 2.gin.Context Gin是一个轻量级的Go语言Web框架,它具有高性能和简洁的设计

    2024年02月03日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包