eg:
//HandFunc
func indexHandler(c *gin.Context) {
fmt.Println("index")
c.JSON(http.StatusOK, gin.H{
"msg": "index",
})
}
//定义一个m1中间件:统计耗时
func m1(c *gin.Context) {
fmt.Println("m1 in ....")
//即使
start := time.Now()
c.Next() // 调用后续的函数 !!!!!
//c.Abort() //阻止后续的函数
cost := time.Since(start)
fmt.Printf("cost:%v\n", cost)
fmt.Println("m1 out ....")
}
//定义一个m2中间件
func m2(c *gin.Context) {
fmt.Println("m2 in ....")
//c.Next() // 调用后续的函数 !!!!!
c.Abort() //阻止后续的函数
//如果想阻止以下或者后续函数
//return
fmt.Println("m2 out ....")
}
//灵活控制 doCheck 开关控制
func authMiddleware(doCheck bool)gin.HandlerFunc{
//连接数据库
//或者一些其他的准备工作
return func(c *gin.Context){
if doCheck{
//是否登录的判断
// if yes 登录
//c.Next()
//else
//c.Abort()
}else{
c.Next()
}
}
}
func main() {
r := gin.Default()
r.Use(m1, m2,authMiddleware(false)) //全局注册m1中间件
r.GET("/index", indexHandler)
r.Run(":8080")
}
跨中间件取值
//设置
c.Set("name","mayi")
//取值
c.Get("name")