Gin 中间件的使用
中间件的使用
router := gin..Default()
Default源码:
func Default() *Engine {
debugPrintWARNINGDefault()
engine := New()
engine.Use(Logger(), Recovery()) //这里的Logger和Recovery就是两个中间件
return engine
}
如果想要使用新的中间件的话只需要添加
router.Use(xxx)
即可
自定义中间件
先看下上述里面Logger中间件的源码
func Logger() HandlerFunc {
return LoggerWithConfig(LoggerConfig{})
}
func LoggerWithConfig(conf LoggerConfig) HandlerFunc {
formatter := conf.Formatter
if formatter == nil {
formatter = defaultLogFormatter
}
out := conf.Output
if out == nil {
out = DefaultWriter
}
··· ···
}
中间件需要返回gin.HandlerFunc函数
自定义一个myMiddleWare中间件
func myMiddleWare() gin.HandlerFunc {
return func(ctx *gin.Context) {
fmt.Println("before")
ctx.Next()
fmt.Println("after")
}
}
Next()函数相当于一个分割线,在Next()函数之前的在Handler之前执行,Next()函数之后的在Handler之后执行
作用范围
上述的中间件都是作用于全局的
如果需要中间件只作用于某些路由上可以在路由上添加中间件
router.Get("/test",myMiddleWare(),handler.test())
上面这段代码就将myMiddleWare这个中间件添加到了/test这个路由的Get方法中