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