Golang回声包中间件实现

时间:2019-07-16 19:18:47

标签: go middleware go-echo

我正在学习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等。

1 个答案:

答案 0 :(得分:1)

next(c)没有任何循环。 next是作为函数参数接收的变量,其中包含一个函数。 next(c)调用该函数。实际上,它是链的下一部分-可能是下一个中间件,也可能是最终请求处理程序。调用func返回的Process时,其本身可能已经被中间件称为next

不涉及任何魔术,库中也没有隐藏的东西,这只是一系列函数调用。