当前位置:网站首页>gin的中间件和路由分组
gin的中间件和路由分组
2022-08-09 12:44:00 【一叶知秋@qqy】
前言
感谢开源项目gin-vue-admin,以及1010工作室的教程,项目文档
我只是在跟着学习,然后记录下笔记而已,可能会有新的代码加入,但是本质还是跟着学习的一个过程。
什么是路由分组
对router创建Group就是分组,对同一分组会拥有统一前缀和统一中间件。
诚然这对于项目的规范管理是非常重要的
写法:router:=gin.Default()
v1 := router.Group("/v1")
v1.POST("/login", loginEndpoint)
v1.POST("/submit", submitEndpoint)
v1.POST("/read", readEndpoint)
这里的v1可以不带下划线,也是被允许的
在main.go中搭建以下代码
package main
import (
"fmt"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default() //启动gin路由,携带基础中间件启动 logger and recovery (crash-free) 中间件
v1 := r.Group("v1")
v1.GET("test", func(c *gin.Context){
fmt.Println("我在分组方法内部")
})
r.Run(":1010") // listen and serve on 0.0.0.0:8080
}
在postman中组件请求,直接带着分组v1进行请求。
修改代码如下,增加返回
func main() {
r := gin.Default() //启动gin路由,携带基础中间件启动 logger and recovery (crash-free) 中间件
v1 := r.Group("v1")
v1.GET("test", func(c *gin.Context){
fmt.Println("我在分组方法内部")
c.JSON(200, gin.H{
"success":true,
})
})
r.Run(":1010") // listen and serve on 0.0.0.0:8080
}
postman再次发起请求
值得注意的是,这里虽然只是在创建路由分组上实现了一个请求,但是实际上可以继续创建其他请求,例如这里使用是的test,完全可以有其他的test1、test2、test3等等,但是共同的特征是他们都有一个共有前缀v1
为什么分组
- 分组可以使路由结构更加清晰
- 更加方便路由的管理
什么是中间件&使用
在请求到达路由的方法的前和后进行的一系列操作
在GIN为我们提供的基础路由中,实际上内部已经配置了两个基础中间件,看下GIN.Default的源码
// Default returns an Engine instance with the Logger and Recovery middleware already attached.
func Default() *Engine {
debugPrintWARNINGDefault()
engine := New()
engine.Use(Logger(), Recovery())
return engine
}
这里是使用好了Logger()中间件和Recovery()中间件。
通过Use()进行加载中间件,如果我们写中间件,使用加载时也是同样的使用这种方式
创建中间件
func middel()gin.HandlerFunc{
return func(c *gin.Context) {
fmt.Println("我在方法前")
c.Next()
fmt.Println("我在方法后")
}
}
在v1分组上挂载中间件
func main() {
r := gin.Default() //启动gin路由,携带基础中间件启动 logger and recovery (crash-free) 中间件
v1 := r.Group("v1").Use(middel())
v1.GET("test", func(c *gin.Context){
fmt.Println("我在分组方法内部")
c.JSON(200, gin.H{
"success":true,
})
})
r.Run(":1010") // listen and serve on 0.0.0.0:8080
}
如果多个中间件时,可以Use(middel1(), middel2()),也可以Use(middel1()).Use(middel2())。
通过上面的方式就使得v1挂载上中间件,也可以说是v1拥有了中间件。
postman组织请求
通过查看打印不难发现,中间件中,c.Next()前是在进入处理请求方法内部前,而c.Next()后则是在处理完请求方法后,通过中间件的方式我们就可以实现在处理请求前后实现不同的功能
当存在多个中间件时,类似于洋葱的结构
即先执行第一个中间件middel1前,执行middel2前,执行请求方法,执行middel2后,执行middel1后,类似于一个洋葱插进去。
再增加一个中间件,看下示例:
func middel()gin.HandlerFunc{
return func(c *gin.Context) {
fmt.Println("我在方法1前")
c.Next()
fmt.Println("我在方法1后")
}
}
func middeltwo()gin.HandlerFunc{
return func(c *gin.Context) {
fmt.Println("我在方法2前")
c.Next()
fmt.Println("我在方法2后")
}
}
func main() {
r := gin.Default() //启动gin路由,携带基础中间件启动 logger and recovery (crash-free) 中间件
v1 := r.Group("v1").Use(middel(), middeltwo())
v1.GET("test", func(c *gin.Context){
fmt.Println("我在分组方法内部")
c.JSON(200, gin.H{
"success":true,
})
})
r.Run(":1010") // listen and serve on 0.0.0.0:8080
}
组织postman请求
这就清晰的展示了多个中间件是怎么使用,并且内部是如何运行的
边栏推荐
- CPU-MIPS32指令架构(无内锁流水线微处理器)
- 第六届”蓝帽杯“全国大学生网络安全技能大赛 半决赛
- Flutter Getting Started and Advanced Tour (1) - Getting to Know Flutter
- Flutter Getting Started and Advanced Tour (7) GestureDetector
- Flutter Getting Started and Advanced Tour (3) Text Widgets
- Compensation transaction and idempotency guarantee based on CAP components
- read stream 特别注意
- 安踏携手华为运动健康共同验证冠军跑鞋 创新引领中国体育
- Redis源码剖析之robj(redisObject)
- leetcode 20. Valid Parentheses 有效的括号(中等)
猜你喜欢
用场景定义硬件,英码科技破解“边缘计算”密码
Ten minutes to teach you how to use VitePress to build and deploy a personal blog site
Flutter入门进阶之旅(四)文本输入Widget TextField
史上最猛“员工”,疯狂吐槽亿万富翁老板小扎:那么有钱,还总穿着同样的衣服!...
Rust from entry to proficient 04 - data types
5G China unicom 一般性异常处理
新起之秀 DPU,正在掀起数据中心变革!
第六届“强网杯”全国网络安全挑战赛
Say goodbye to the AI era of hand looms
5G China unicom general exception handling
随机推荐
Intra-group reverse order adjustment of K nodes
Redis源码剖析之robj(redisObject)
kustomize入门示例及基本语法使用说明
随机快排时间复杂度是N平方?
Flutter入门进阶之旅(三)Text Widgets
Data Mining-06
在“Extend the Omniverse”比赛中构建用于 3D 世界的工具
激光熔覆在农机修复强化中的应用及研究方向
26. Pipeline parameter substitution command xargs
Do you know the difference between comments, keywords, and identifiers?
SQL Server查询优化 (转载非原创)
glide工具类的简单封装
绘制混合密度函数图以及添加分位数线
ftplib+ tqdm 上传下载进度条
Rust 入门指南(使用JSON)
合并两个有序列表
驻波比计算方法
JVM之配置介绍(一)
Flutter Getting Started and Advanced Tour (4) Text Input Widget TextField
The new features of ABP 6.0.0 - rc. 1