Golang echo包中间件的实现

Golang echo包中间件的实现,go,middleware,go-echo,Go,Middleware,Go Echo,我正在学习Go,并且正在学习以下示例:。我想深入了解一下,在调用函数middleware functionProcess()中的next(c)时发生了什么 查看main()我知道我们通过Use()调用将Process()函数附加到echoContext对象的中间件函数列表中。但是,查看中间件示例中的Process()函数中的next(c)调用如何查看上下文的所有中间件函数,我不确定。在搜索源代码之后,我似乎也找不到一些东西: (1) 正在定义的echo.HandlerFunc的函数定义在哪里?我

我正在学习Go,并且正在学习以下示例:。我想深入了解一下,在调用函数middleware function
Process()
中的
next(c)
时发生了什么

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

(1) 正在定义的
echo.HandlerFunc
的函数定义在哪里?我明白了,但这是导出的,没有在
echo.go中使用,所以我不知道
next(c)
调用
echo.go中的哪行代码时会发生什么

(2) 调用
applyMiddleware
时似乎会发生循环,因为它似乎会循环遍历上下文中间件函数列表中保存的所有中间件函数,但我看不到该方法是如何调用的,除非调用导出的
WrapMiddleware
函数或
ServeHTTP
下一步(c)
不会循环任何内容
next
是作为函数参数接收的变量,其中包含函数
next(c)
调用该函数。在实践中,它是链的下一部分-可能是下一个中间件,也可能是最终的请求处理程序。当调用
进程
返回的
func
时,它本身可能被它前面的中间件称为
next


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

如果您指的是特定的源代码,请在问题主体中引用相关代码,而不是外部链接。不是一个函数而是一个类型,这就是为什么没有函数定义的原因,但是,如果您感兴趣,中有一个类型定义。谢谢。我仍然不确定当请求到达
/stats
时会发生什么。请求进入时,如何首先调用中间件
HandlerFunc
进程
?然后让我们假设在
过程之后要执行第二个中间件函数。我想知道函数调用链是如何工作的。但是,一旦我正确设置了VSCode Go调试器,我就可以单步执行它了。路由器(在您的例子中是gin)调用为路由注册的处理程序。您已经将处理程序包装在中间件中,因此路由器实际上正在调用中间件。然后中间件调用其参数,以此类推。