当前位置:网站首页>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 中间件,返回结果 - 漫步的影子 - 博客园
边栏推荐
- MySQL优化:从十几秒优化到三百毫秒
- C Implementation of Simple Network File Copy
- ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)解决办法
- Interview | Cheng Li, CTO of Alibaba: Cloud + open source together form a credible foundation for the digital world
- MySQL忘记密码怎么办
- 【R语言】【3】apply,tapply,lapply,sapply,mapply与par函数相关参数
- 1. 获取数据-requests.get()
- 扫雷小游戏——C语言
- 开源社区三十年 | 2022开放原子全球开源峰会开源社区三十年专题活动圆满召开
- HCIP第十天_BGP路由汇总实验
猜你喜欢
产学研用 共建开源人才生态 | 2022开放原子全球开源峰会教育分论坛圆满召开
MySQL transaction (transaction) (this is enough..)
MySQL优化之慢日志查询
DVWA之SQL注入
MySQL database backup
MySQL window function
ENSP, VLAN division, static routing, comprehensive configuration of Layer 3 switches
Unity资源管理系列:Unity 框架如何做好资源管理
ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)解决办法
EasyExcel的简单读取操作
随机推荐
ERROR 2003 (HY000) Can't connect to MySQL server on 'localhost3306' (10061)
Mysql application cannot find my.ini file after installation
.NET-6.WinForm2.NanUI学习和总结
【py脚本】批量二值化处理图像
MySQL数据库增删改查(基础操作命令详解)
Musk talks to the "virtual version" of Musk, how far is the brain-computer interaction technology from us
三道leetcode上的oj题
从零开始,一镜到底,纯净系统搭建除草机(Grasscutter)
Open Source Database Innovation in the Digital Economy Era | 2022 Open Atom Global Open Source Summit Database Sub-Forum Successfully Held
开源社区三十年 | 2022开放原子全球开源峰会开源社区三十年专题活动圆满召开
ERROR 2003 (HY000) Can't connect to MySQL server on 'localhost3306' (10061)Solution
[debug highlights] Expected input batch_size (1) to match target batch_size (0)
Unity Fighter
[Cloud Native] DevOps (5): Integrating Harbor
centos7安装mysql5.7
Go language study notes - dealing with timeout problems - Context usage | Go language from scratch
产学研用 共建开源人才生态 | 2022开放原子全球开源峰会教育分论坛圆满召开
Gaussian distribution and its maximum likelihood estimation
SQL row-column conversion
开放原子开源基金会秘书长孙文龙 | 凝心聚力,共拓开源