我正在学习Go,并且正在查看以下示例:echo middleware example。我想深入研究一下我们在函数中间件函数next(c)
中调用Process()
时发生了什么。
看看main()
,我知道我们通过Process()
调用将Context
函数附加到echo Use()
对象的中间件函数列表中。但是,看一下echo source code,我不确定中间件示例中next(c)
函数中的Process()
调用是如何通过上下文的所有中间件函数来查看的。甚至在搜索源代码后,我似乎也找不到类似的东西:
(1)在哪里定义echo.HandlerFunc
的函数定义?我看到了WrapHandler,但是它是导出的,没有在echo.go
中使用,所以我很困惑,当next(c)
被称为我们跳到的echo.go
源代码中的哪一行代码时,会发生什么。
(2)似乎在调用applyMiddleware
时发生循环,因为这似乎遍历了Context的中间件函数列表中保存的所有中间件函数,但是除非您知道,否则我不知道该方法的调用方式调用导出的WrapMiddleware
函数或ServeHTTP
等。
答案 0 :(得分:1)
next(c)
没有任何循环。 next
是作为函数参数接收的变量,其中包含一个函数。 next(c)
调用该函数。实际上,它是链的下一部分-可能是下一个中间件,也可能是最终请求处理程序。调用func
返回的Process
时,其本身可能已经被中间件称为next
。
不涉及任何魔术,库中也没有隐藏的东西,这只是一系列函数调用。