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框架 中间件 Abort():gin 框架中间件处理有两个重要的函数 Next() 和 Abort()。Abort 函数在被调用的函数中阻止后续中间件的执行。例如,你有一个验证当前的请求是否是认证过的 Authorization 中间件。如果验证失败(例如,密码不匹配),调用 Abort 以确保这个请求的其他函数不会被调用。有个细节需要注意,调用 Abort 函数不会停止当前的函数的执行,除非后面跟着 return。