快速图解
简化版代码
代码赏析
Middleware 处理接口定义
看完上面在看kratos中如何设计的 Middleware 使用 type Handler func(ctx context.Context, req interface{}) (interface{}, error)
用于简化复杂签名
Middleware 的定义是 type func(Handler) Handler
为什么传入一个Handler 在将 Handler 返回呢,其实看到真实的 middleware 的实例就会清楚,传入的 Handler 可以说是 后置的Handler,返回的Handler 是包含了 后置 Handler 与当前 Handler 逻辑新的Handler。
Chain 函数主要用于Handler循环迭代调用,返回最终 Middleware,并将最终调用业务逻辑的handler 传入返回的 Middleware
Middleware 调用
kratos 中 middleware 的调用在 transport/http/client.go 处
Middleware 实例
总结
现在在回过来看middreware 的设计,其实是需要构造一个 链式迭代处理的功能函数,同时配合 golang 的 context 将 context 传给 内层调用函数,保证对context 做的修改可以一直迭代持续下去,最终经过层层middleware处理的 context,传给 Request 的 context ,给业务处理逻辑使用。
如果你看不到评论,那么就真的看不到评论w(゜Д゜)w