golang echo包中间件实现

Golang echo package middleware implementation

我正在学习 Go 并正在学习这个示例:echo middleware example。我想深入了解当我们在函数中间件函数 Process() 中调用 next(c) 时发生了什么。

查看 main() 我知道我们通过 Use() 调用将 Process() 函数附加到 echo Context 对象的中间件函数列表。但是,查看 echo source code 我不确定中间件示例中 Process() 函数中的 next(c) 调用如何查看上下文的所有中间件函数。即使在搜索源代码后我似乎也找不到一些东西:

(1)echo.HandlerFunc的函数定义在哪里定义的?我看到 WrapHandler 但它已导出并且未在 echo.go 中使用,所以我很困惑当 next(c) 被调用时会发生什么,我们跳转到 echo.go 源代码中的哪一行代码。

(2) 看起来循环是在调用 applyMiddleware 时发生的,因为它似乎循环遍历了保存在 Context 的中间件函数列表中的所有中间件函数,但我看不到该方法是如何调用的除非你调用导出的 WrapMiddleware 函数或 ServeHTTP

next(c) 不会遍历任何内容。 next 是作为函数参数接收的变量,其中包含一个函数。 next(c) 调用该函数。实际上,它是链的下一部分——可能是下一个中间件,或者可能是最终的请求处理程序。当调用 Process returns 的 func 时,它本身可能已被它之前的中间件调用为 next

库中没有任何魔法,也没有隐藏任何内容,只是一连串的函数调用。