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回答

ccmouse

2020-06-10

gin里面Use里的middleware函数和本身请求的处理函数会被串起来。context.Next()会触发这串处理函数中的下一个直至返回。context.Next()在一个middleware函数中应该只调用一次。这里你获取不到很可能是在第一个context.Next()就把处理请求的函数执行完了。

当然了,除了context.Next,还有context.Abort等

0
1
椰子树
非常感谢!
2020-06-13
共1条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程