框架 | Go框架中间件实现方式
为了更好的实现GoFast,我看了很多Golang的Web框架,包括比较流行的:
Gin、Echo、iris、go-zero
等。他们关于中间件的实现有很多相似的地方,但也有特色的地方,这里我们就重点分析一下他们的实现,顺便说说我的看法,最后介绍一下GoFast的实现。
Gin构造中间件数组
Gin框架是对每个路由节点单独构建一个中间件切片,请求来了之后按照顺序依次执行,中间有异常就中断执行链。
|
|
Iris构造中间件数组
|
|
最后匹配到路由,然后执行中间件的方式和Gin是一样的,看下面匹配路由和执行中间件的代码就知道了:
|
|
iris框架还有一种MVC模式,此时controller的所有方法会按照规则自动生成相应的路由,并注册到路由树。
|
|
Echo请求时构造链式中间件
echo的有两个全局中间件premiddleware 和 middleware 。比如Gin的单一数组,可配置性更强一些。
|
|
go-zero构造链式中间件
|
|
GoFast的中间件设计
前面几个框架中间件的实现都不错,但有些地方我并不是太喜欢,为什么呢?
- 业务代码中需要使用ctx.Next(),比如Iris这样挺繁琐的。
- 在使用app.Use()函数的时候,这与路由的app.GET()的先后顺序相关。也就是你需要注意顺序。
- echo居然在运行时路由匹配之后动态构造中间件数组。
- echo和go-zero的链式调用并不太好理解,自定义中间件稍有障碍。
于是在GoFast中我实现了类似Gin和Iris(在实现GoFast的时候我并没有看过Iris框架)的中间件数据结构,但是比他们都灵活的多。更多具体内容参考我对GoFast的专题介绍:
GoFast设计概览:/2021/01/01120012-001-intr.html
参考:
https://blog.csdn.net/weixin_29292535/article/details/112126594
(完)
- 原文作者: 闪电侠
- 原文链接:https://chende.ren/2021/10/26185025-006-web-freamwork.html
- 版权声明:本作品采用 开放的「署名 4.0 国际 (CC BY 4.0)」创作共享协议 进行许可