当前位置:网站首页>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 中间件,返回结果 - 漫步的影子 - 博客园
边栏推荐
- centos7安装mysql5.7
- 参考代码系列_1.各种语言的Hello World
- input输入框展示两位小数之precision
- 【R语言】【3】apply,tapply,lapply,sapply,mapply与par函数相关参数
- C Implementation of Simple Network File Copy
- 聚变云原生,赋能新里程 | 2022开放原子全球开源峰会云原生分论坛圆满召开
- PCL calculates the point cloud coordinate maximum and its index
- Error EPERM operation not permitted, mkdir 'Dsoftwarenodejsnode_cache_cacach Two solutions
- MySQL数据库增删改查(基础操作命令详解)
- npm、nrm两种方式查看源和切换镜像
猜你喜欢
MySQL数据库备份
[Cloud Native] DevOps (5): Integrating Harbor
Numpy中np.meshgrid的简单用法示例
Sun Wenlong, Secretary General of the Open Atom Open Source Foundation |
STM32——DMA
SOLVED: After accidentally uninstalling pip (two ways to manually install pip)
centos7安装mysql5.7步骤(图解版)
Hand in hand to realize the picture preview plug-in (3)
input输入框展示两位小数之precision
Mysql application cannot find my.ini file after installation
随机推荐
CentOS7 安装MySQL 图文详细教程
SQL语句中对时间字段进行区间查询
矩池云快速安装torch-sparse、torch-geometric等包
Sql解析转换之JSqlParse完整介绍
【ORACLE Explain 详解】
PWN ROP
centos7安装mysql5.7步骤(图解版)
高斯分布及其极大似然估计
益智类游戏关卡设计:逆推法--巧解益智类游戏关卡设计
Create componentized development based on ILRuntime hot update
Summary of MySQL common interview questions (recommended collection!!!)
Centos7 install mysql5.7 steps (graphical version)
Unity Tutorial: URP Rendering Pipeline Practical Tutorial Series [1]
MySQL database installation (detailed)
The monitoring of Doris study notes
Duplicate entry ‘XXX‘ for key ‘XXX.PRIMARY‘解决方案。
npm、nrm两种方式查看源和切换镜像
ENSP, VLAN division, static routing, comprehensive configuration of Layer 3 switches
mysql存储过程
ERROR 1819 (HY000) Your password does not satisfy the current policy requirements