当前位置:网站首页>Go中间件
Go中间件
2022-07-31 04:55:00 【話吥哆先森丶】
一、简述
gin中间件类似java的拦截器,通过中间件可以在处理具体的route请求时,提前做一些业务。比如用户有效性的校验,特定日志格式的打印,错误日志的打印等等。
一个个中间件组成一条中间件链,对HTTPRequest请求进行拦截处理,实现了代码的解耦和分离,并且中间件之间相互不用感知到,每个中间件只需要处理自己需要处理的事情即可。
gin的中间件大致可以分为两类,全局中间件和路由中间件,下面记录gin的中间件学习过程中的一些问题。
- 全局中间件
- Group 中间件
- 单个路由中间件
二、全局中间件
1、默认中间件
使用router := gin.Default()定义route时,默认带了Logger()和Recovery()。我们可以使用BasicAuth()中间件做一些简单的用户权限的认证
|
gin的中间件是通过Use方法设置的,它接受一个可变的参数,所以我们可以设置多个中间件
|
一个gin的中间件,其实就是一个HandleFunc
|
2、自定义中间件
|
示例:
获取请求中的sessionid,写入到context中,context.Next()跳到下一个中间件中,下一个中间件会对这个session进行有效性校验(sessionid是否存在,是否过期等)
|
3、路由中间件
只是针对具体的路由规则
示例:
下面定义了一个分组路由/user,分组路由下的/login需要验证用户名和密码,这个路由使用的是路由中间件Validate(),通过查库验证用户名和密码。而其余的路由/manager/show和/manager/modify使用了路由中间件handles.Cookie(),这个中间件验证用户在登陆成功后的sessionid的有效性
|
三、中间件件的流转
gin提供了两个函数Abort()和Next(),配合着return关键字用来跳转或者终止存在着业务逻辑关系的中间件。
.Next()
跳过当前的中间件,执行下一个中间件,待下一个中间件执行完后再回到当前next位置,执行后面的逻辑
.Abort()
终止该中间件的流程,如果不return的话会继续执行后面的逻辑,但不再执行其他的中间件
结论
1. next()函数会跳过当前中间件中next()后的逻辑,当下一个中间件执行完成后再执行剩余的逻辑
2. abort()函数执行终止当前中间件以后的中间件执行,但是会执行当前中间件的后续逻辑
Gin框架系列03:换个姿势理解中间件 - Go语言中文网 - Golang中文社区
golang gin 中间件,返回结果 - 漫步的影子 - 博客园
边栏推荐
- STM32 - DMA
- ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)
- Lua,ILRuntime, HybridCLR(wolong)/huatuo热更新对比分析
- MySQL忘记密码怎么办
- STM32HAL library modifies Hal_Delay to us-level delay
- [C language] Detailed explanation of operators
- MySQL transaction (transaction) (this is enough..)
- 高斯分布及其极大似然估计
- Three oj questions on leetcode
- Visual studio shortcuts that improve efficiency, summary (updated from time to time)
猜你喜欢

Unity资源管理系列:Unity 框架如何做好资源管理

ERROR 1819 (HY000) Your password does not satisfy the current policy requirements

【C语言】操作符详解

Hand in hand to realize the picture preview plug-in (3)

开放原子开源基金会秘书长孙文龙 | 凝心聚力,共拓开源

12个MySQL慢查询的原因分析

三道leetcode上的oj题

MySQL forgot password

论治理与创新 | 2022开放原子全球开源峰会OpenAnolis分论坛圆满召开

sql语句之多表查询
随机推荐
MySQL忘记密码怎么办
ES 源码 API调用链路源码分析
Unity手机游戏性能优化系列:针对CPU端的性能调优
SQL row-column conversion
开放原子开源基金会秘书长孙文龙 | 凝心聚力,共拓开源
prompt.ml/15中<svg>标签使用解释
MySQL优化:从十几秒优化到三百毫秒
[py script] batch binarization processing images
Solved (the latest version of selenium framework element positioning error) NameError: name 'By' is not defined
Doris学习笔记之监控
MySQL transaction (transaction) (this is enough..)
Understanding of the presence of a large number of close_wait states
Industry landing presents new progress | 2022 OpenAtom Global Open Source Summit OpenAtom OpenHarmony sub-forum was successfully held
专访 | 阿里巴巴首席技术官程立:云+开源共同形成数字世界的可信基础
centos7安装mysql5.7
Unity资源管理系列:Unity 框架如何做好资源管理
Unity Fighter
Mysql应用安装后找不到my.ini文件
12个MySQL慢查询的原因分析
【R语言】【3】apply,tapply,lapply,sapply,mapply与par函数相关参数