gin框架 中间件使用
gin 框架允许在请求处理过程中,加入用户自己的钩子函数,这个钩子函数就叫中间件。
中间件的英文名称为 MiddleWare。
gin 中间件常用于处理一些公共业务逻辑,比如登陆校验,耗时统计,日志打印等工作。
1. gin 中间件的使用方法
gin 中间件使用方法如下:
func (engine *Engine) Use(middleware ...HandlerFunc) IRoutes
比如:
engine := gin.Default() engine.Use(MiddleWare())
还可以同时使用多个中间件,形成中间件链条。
比如:
engine := gin.Default() engine.Use(MiddleWare1(), MiddleWare2(), MiddleWare3())
2. gin 中间件的使用范例
package main import ( "fmt" "github.com/gin-gonic/gin" ) // 定义中间件 func MiddleWare() gin.HandlerFunc { return func(c *gin.Context) { fmt.Println("调用中间件") } } func main() { // 创建路由 engine := gin.Default() // 注册中间件 engine.Use(MiddleWare()) // 路由规则 engine.GET("/", func(c *gin.Context) { fmt.Println("调用路由处理函数") // 页面接收 c.JSON(200, gin.H{"request": "编程宝库 gin框架"}) }) engine.Run() }
运行程序,并在浏览器输入:http://localhost:8080,控制台日志会输出:
[GIN-debug] GET / --> main.main.func1 (4 handlers) [GIN-debug] Listening and serving HTTP on :8080 调用中间件 调用路由处理函数 [GIN] 2021/05/31 - 12:03:13 | 200 | 193.22µs | ::1 | GET "/"
说明中间件被调用,而且是在页面处理函数之前执行的。
3. gin 多个中间件的使用范例
gin 框架支持同时使用多个中间件,并按照写入顺序依次执行。
package main import ( "fmt" "github.com/gin-gonic/gin" ) // 定义中间件1 func MiddleWare1() gin.HandlerFunc { return func(c *gin.Context) { fmt.Println("调用中间件1") } } // 定义中间件2 func MiddleWare2() gin.HandlerFunc { return func(c *gin.Context) { fmt.Println("调用中间件2") } } // 定义中间件3 func MiddleWare3() gin.HandlerFunc { return func(c *gin.Context) { fmt.Println("调用中间件3") } } func main() { // 创建路由 engine := gin.Default() // 注册中间件 engine.Use(MiddleWare1(), MiddleWare2(), MiddleWare3()) // 路由规则 engine.GET("/", func(c *gin.Context) { fmt.Println("调用路由处理函数") // 页面接收 c.JSON(200, gin.H{"request": "编程宝库 gin框架"}) }) engine.Run() }
运行程序,并在浏览器输入:http://localhost:8080,控制台日志会输出:
[GIN-debug] GET / --> main.main.func1 (4 handlers) [GIN-debug] Listening and serving HTTP on :8080 调用中间件1 调用中间件2 调用中间件3 调用路由处理函数 [GIN] 2021/05/31 - 12:03:13 | 200 | 193.22µs | ::1 | GET "/"
说明三个中间件被依次调用,而且是在页面处理函数之前执行的。
gin框架 中间件 Abort():gin 框架中间件处理有两个重要的函数 Next() 和 Abort()。Abort 函数在被调用的函数中阻止后续中间件的执行。例如,你有一个验证当前的请求是否是认证过的 Authorization 中间件。如果验证失败(例如,密码不匹配),调用 Abort 以确保这个请求的其他函数不会被调用。有个细节需要注意,调用 Abort 函数不会停止当前的函数的执行,除非后面跟着 return。