Golang echo包中间件实现

标签 go middleware go-echo

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

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

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

(2) 看起来循环是在调用 applyMiddleware 时发生的,因为这似乎循环了上下文中间件函数列表中保存的所有中间件函数,但我不明白该方法是如何实现的除非您调用导出的 WrapMiddleware 函数或 ServeHTTP 等,否则会调用。

最佳答案

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

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

关于Golang echo包中间件实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57064089/

相关文章:

go - 将自定义中间件类型传递给alice.New()函数时,构建失败

go - 泛型:对带有返回自身的函数的类型的约束

go - 如何部署 iris(Go Web 框架)项目?

ruby-on-rails - 在 Middleware Localhost 中获取客户端 IP

go - 在 Echo 框架中测试多部分表单上传端点

go - 在 Echo 中从查询字符串获取整数值的惯用方法是什么?

go - benchmem 的输出

javascript - 为什么我的中间件执行了两次?

go - 如何省略结构字段

python - Pyramid:用于自定义记录器和外部授权系统的 Tween 或 WSGI 中间件?