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
{
"data": {
"middlewareA": "中间件A传递的值",
"middlewareB": "中间件A传递的值 *** 我是中间件B"
}
}
转载本文无需作者授权,但一定要标明为转载内容,并标明转载博客地址:https://www.cnblogs.com/ganto/articles/18136552