Gin 中间件
Gin框架允许开发者在处理请求的过程中,加入用户自己的狗子函数,这个狗子函数叫中间件,中间件适合处理一些公共的业务逻辑,比如登录认证,权限校验,数据分页,记录日志,统计耗时等
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
"time"
)
// gin.Context,封装了request和response
func indexHandler(c *gin.Context){
c.JSON(http.StatusOK,gin.H{
"msg":"index",
})
}
//定义一个中间件 统计耗时
func m1(c *gin.Context){
fmt.Println("m1 in")
//计时
start:=time.Now()
c.Next() // 调用后序的处理函数indexHandler
cost := time.Since(start)
fmt.Println("cost:%v\n",cost)
}
//定义一个中间件 统计耗时
func m2(c *gin.Context){
fmt.Println("m2 in")
c.Next() // 调用后序的处理函数indexHandler
fmt.Println("m2 out")
}
//用户登录中间件
func authMiddleware(doCheck bool)gin.HandlerFunc{
// 链接数据库
//或一些其他操作
return func(c *gin.Context) {
if doCheck{
//是否登录的判断
// if 是登陆
}else {
c.Next()
}
}
}
func main() {
r := gin.Default()
// 全局注册中间件 先执行m1 在执行m2
r.Use(m1,m2,authMiddleware(true)) //true检查
// 请求进来了先执行m1在走indexHandler 全局注册后就不用每个都写m1
//r.GET("/index",m1, indexHandler)
//r.GET("user",m1, func(c *gin.Context) {
// c.JSON(http.StatusOK,gin.H{
// "msg":"user",
// })
//})
r.GET("/index",indexHandler)
r.GET("/user",func(c *gin.Context) {
c.JSON(http.StatusOK,gin.H{
"msg":"user",
})
})
r.Run()
}
结果