gin的use方法为什么要多个函数处理
来源:13-6 为gin增加middleware

椰子树
2020-06-08
老师我想问下,gin里的Use方法,我试了两种方法去获取requestId
第一种如下
r.Use(func(context *gin.Context) {
s := time.Now()
context.Next()
logger.Info("incoming string", zap.String("url", context.Request.URL.Path),
zap.Int("status", context.Writer.Status()),
zap.Duration("elapsd", time.Now().Sub(s)),
)
//将获取requestId和写日志的方法写在一起
context.Set(keyName, rand.Int())
context.Next()
})
这种是获取不到的,但是也不报错
第二种就是老师你的写法,我想问下
1、为什么这里必须要传递两个func参数来是想两件事,而不能一个func参数就将两个事情做完
2、context.Next()是等相当于完成了这个请求之后再接着下面的处理逻辑么
写回答
1回答
-
gin里面Use里的middleware函数和本身请求的处理函数会被串起来。context.Next()会触发这串处理函数中的下一个直至返回。context.Next()在一个middleware函数中应该只调用一次。这里你获取不到很可能是在第一个context.Next()就把处理请求的函数执行完了。
当然了,除了context.Next,还有context.Abort等
012020-06-13
相似问题
请教老师一个gin的问题?
回答 2
函数闭包递归的问题。
回答 4