0

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

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

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

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

4

1 回答 1

1

next(c)不循环任何东西。next是作为函数参数接收的变量,其中包含函数。next(c)调用该函数。在实践中,它是链的下一部分——可能是下一个中间件,也可能是最终的请求处理程序。当调用functhatProcess返回时,它本身可能已被next它之前的中间件调用。

没有魔法,库中也没有隐藏任何东西。它只是一个函数调用链。

于 2019-07-16T19:44:47.763 回答