中间件解析
每个中间件是独立的,可以多个中间件组成一个链状的结构,让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)}
作者:小小小丶叶子著作权归作者所有。