自己阅读过 echo gin http.Server 全部、beego 大部分、iris 少量代码, net/http 体系下 echo > gin > beego > net/http > iris 、goframe 、fiber,下面列出我自己看到的一些不足,不推荐 fasthttp 原因生态相对弱,仅支持 http/1.1 。

echo 中间件闭包消耗大量资源(每一个中间件的成本与其他框架不成比例),router any 方法不具有优先级。单元测试:84%

gin Context 非接口无法扩展,没有内置 Logger 无法自动输出 err (所有 err 必须处理,否在运行出现了 err 自己都不知道),validator 注册不合理( v8 、v9 、v10 可能注册到不同版本里面去了),不支持路由优先级和 any 方法优先级(从 httprouter 继承的问题)。单元测试:98%

beego 程序是单例,代码复杂度过高一个核心方法 200+行( ServeHTTP 方法),内置对象太多导致框架过重无法扩展(内置嵌入了 csrf 、session 等功能但并不需要),体系相对成熟。单元测试:无公开数据

iris 代码抄袭 篡改 git 历史(抄袭 httprouter 被锤改 git 历史 https://github.com/avelino/awesome-go/pull/1135) 删除老版本代码( git 历史改了一些版本代码没了,老项目无法编译了),httptest 库测试 iris 会 panic,最新版本 api 设计还是不合理,中间件机制少个 for 导致设计极差不合理,HandleDone 方法画蛇添足使用不便,稳定性差每个大版本 api 全变(都 v12 还不合理怎么会稳定)。单元测试:无公开数据 自己单元测试引入 iris 触发 panic

goframe ghttp于其他框架相比太过于粗糙,路由器和中间件作为http框架设计不完善(中间件机制和路由器性能),大部分代码是工具相关内容。单元测试: 69%、60%(ghttp)

fiber: 低性能 for 循环路由器,没有单元测试,存在 Race Data 导致的 bug 。

关于性能都差不多的没有可以拉开性能差距的地方,随便学一个源码就可以了,结构都差别的没啥难点,看公司需要使用什么。echo 和 gin 加上依赖一共也都有 100 多 M,学那个框架都避不开 net/http 库,这个才是根本。


路由器实现,也都是渣渣。

httprouter 高性能 不支持路由优先级和 any 方法优先级,代码复杂度太高。

chi 中等性能,支持路由优先级,资源消耗是 httprouter 时间 5 倍、内存 10 倍

mux 非高性能路由器实现(没测试,但是实现方法至少慢 20 倍以上,看别人测试数据是比 httprouter 慢 300 倍),使用链式 api 太繁琐与其他库使用方法差距较大同时不具有明显独特优势。

frame

github.com/labstack/echo

github.com/gin-gonic/gin

github.com/astaxie/beego

router

github.com/go-chi/chi

github.com/julienschmidt/httprouter

github.com/gorilla/mux

性能耗时httprouter=1 chi=5 mux=20+(估计值),chi路由器具有路由优先级。

webscoekt

golang.org/x/net/websocket(废弃)

github.com/gorilla/websocket

github.com/gobwas/ws

nhooyr.io/websocket

session

github.com/astaxie/beego/session

github.com/gorilla/sessions

proxy

net/http/httputil

results matching ""

    No results matching ""