首页>>后端>>Golang->Golang Gin框架 中间件(一)中间件解析

Golang Gin框架 中间件(一)中间件解析

时间:2023-11-29 本站 点击:1

中间件解析

每个中间件是独立的,可以多个中间件组成一个链状的结构,让request请求流水线般的进行拦截处理。

除了内置的中间件r := gin.Default()中的日志中间件Logger() 和 恢复错误现场中间件Recovery()之外,还可以自定义中间件,比如:

funcTimeCostMiddleware(c*gin.Context){t:=time.Now()//请求之前c.Next()//处理请求//请求之后//计算整个请求过程耗时t2:=time.Since(t)log.Println(t2)}

按类型分为全局中间件和局部中间件

注册为全局中间件,使用func (engine *Engine) Use(middleware ...HandlerFunc),同时也能使用该函数对路由组进行注册;
packagemainimport("github.com/gin-gonic/gin""log""net/http""time")funcmain(){r:=gin.Default()r.Use(TimeCostMiddleware)//使用Use进行全局中间件的注册r.GET("/hello",func(c*gin.Context){c.JSON(http.StatusOK,gin.H{"message":"hello",})})_=r.Run(":8080")}funcTimeCostMiddleware(c*gin.Context){t:=time.Now()//请求之前c.Next()//处理请求//请求之后//计算整个请求过程耗时t2:=time.Since(t)log.Println("耗时",t2)}
2021/09/0111:37:33耗时0s[GIN]2021/09/01-11:37:33|?[97;42m200?[0m|26ms|::1|?[97;44mGET?[0m"/hello"
注册为局部中间件,直接写入函数入口参数中,中间件的本质也是HandlerFunc,同时对路由组也能写入入口参数中也能实现这个效果:
packagemainimport("github.com/gin-gonic/gin""log""net/http""time")funcmain(){r:=gin.Default()r.GET("/hello",TimeCostMiddleware,func(c*gin.Context){//写入入口参数中进行局部中间件的注册c.JSON(http.StatusOK,gin.H{"message":"hello",})})_=r.Run(":8080")}funcTimeCostMiddleware(c*gin.Context){t:=time.Now()//请求之前c.Next()//处理请求//请求之后//计算整个请求过程耗时t2:=time.Since(t)log.Println("耗时",t2)}

作者:小小小丶叶子著作权归作者所有。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Golang/227.html