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
。
库中没有任何魔法,也没有隐藏任何内容,只是一连串的函数调用。
我正在学习 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
。
库中没有任何魔法,也没有隐藏任何内容,只是一连串的函数调用。