Gin中间件上下文中的Set、Get函数的用法

Code

如下代码所示,中间件middlewareA内部通过c.Set("middlewareA_key", str)将参数设置到上下文中
所以中间件middlewareB可以通过c.Get("middlewareA_key")获取到上下文中传递的值,并将值进行了修改,然后继续通过上下文进行了传递
然后在控制器函数中可以通过上下文c.Keys["middlewareB_key"]的方式获取

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
)

func main() {
	router := gin.Default()

	router.Use(middlewareA("中间件A传递的值"), middlewareB())
	router.GET("/", func(c *gin.Context) {
		valueA := c.Keys["middlewareA_key"]
		valueB := c.Keys["middlewareB_key"]
		c.JSON(200, gin.H{
			"data": map[string]any{
				"middlewareA": valueA,
				"middlewareB": valueB,
			},
		})
	})

	if err := router.Run(":8090"); err != nil {
		fmt.Printf("run server error: %v", err)
		panic(err)
	}
}

func middlewareA(str string) gin.HandlerFunc {
	return func(c *gin.Context) {
		c.Set("middlewareA_key", str)
		c.Next()
	}
}

func middlewareB() gin.HandlerFunc {
	return func(c *gin.Context) {
		middlewareAKey, _ := c.Get("middlewareA_key")
		c.Set("middlewareB_key", middlewareAKey.(string)+" *** 我是中间件B")
		c.Next()
	}
}

需要注意的是,中间件设置的数据,会同时存在在控制器函数的上下文中,均可以获取

Return

请求:http://localhost:8090

{
    "data": {
        "middlewareA": "中间件A传递的值",
        "middlewareB": "中间件A传递的值 *** 我是中间件B"
    }
}
posted @ 2024-04-15 17:26  干徒  阅读(74)  评论(0编辑  收藏  举报