gin自定义中间件
代码
go
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
"time"
)
// MyLogger 自定义中间件:方式二:通过定义函数,返回gin.HandlerFunc类型的函数,定义中间件
// type HandlerFunc func(*Context)
func MyLogger() gin.HandlerFunc {
return func(c *gin.Context) {
fmt.Println("自定义中间件执行的逻辑")
// 执行主体流程
c.Next()
}
}
func main() {
/*gin自定义中间件*/
r := gin.Default()
// 自定义中间件,在gin的全局使用,
// 自定义中间件:方式一:通过匿名函数定义中间件
r.Use(func(c *gin.Context) {
/* 如:统计请求执行时间 */
// 获取当前时间
t := time.Now()
// 执行主体流程
c.Next()
end := time.Since(t)
fmt.Printf("耗时:%v\n", end)
// 获取响应的状态
status := c.Writer.Status()
fmt.Println("状态:", status)
})
// 配置请求路由
r.GET("/ping", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"data": "pong",
})
})
/*配置指定路由使用的中间件*/
{
// 配置define组的路由
defineGroup := r.Group("/define")
// 在组路由中使用自定义中间件(非全局),不会影响到其他路由,注意需要在配置组内路由前,进行中间件的配置,否则不会生效
defineGroup.Use(MyLogger())
// 配置组内路由
defineGroup.GET("/haha", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"data": "haha",
})
})
}
// 运行gin
_ = r.Run(":8082")
}