go語言另外兩個知名框架的比較

字號+ 編輯: IT男在阿里 修訂: 种花家 來源: 曾志海 2023-11-01 我要說兩句(2)

根據追麾推薦的文章, 特此轉載, 以饗各位go語言愛好者。

Web框架类型

web框架的主流,是采用轻量级的中间件式框架,把网站变成只有api的一个个小服务,其他都扔到cdn之类的地方处理。

这种方式,开发快速、拼装能力强,要什么就加什么,不要的就不加,就像是乐高玩具,大受欢迎。

问题在于,这种框架有一堆,到底该选哪个。

Gin vs Echo

在golang中,这种杰出代表,有2个:gin 和 echo。

这两个框架,在同类中,路由性能最高,超出其他框架一大截。google了一大堆英文站,也没有找到这两个框架的比较。于是,在我们实际使用后,提供个比较。

先说结论:

如果你代表企业,最好选择gin,无痛开发。

如果是个人,开发个轻量服务,哪怕echo有点小问题,你也觉得没啥,那么,就用echo。

下面是比较:

框架成熟度

gin完胜。

gin拥有完善的调试信息,极为方便。

这非常关键。调试信息不足,碰到一些问题会把自己累死。团队项目,这个更加重要。

echo在这方面,就差一大截,第一次使用,就遇到了明明路由语法写错了,却不报错、不给结果,也没有任何提示的情况。

路由性能

gin微弱小胜

gin的卖点,是所有web框架中,路由性能最好。

echo的卖点,是它的路由性能,比gin还好10%。

国外实际测试结果是:echo只在空路由时,性能比gin好10%。而常用的各种带参数路由,echo其实要输给gin约5-10%。

gin和echo的最新详尽对比,(部分地区可能需要特殊方式访问)传送门地址:https://github.com/gin-gonic/gin/issues/329 

路由便利、灵活性

一回事

gin的路由,采用一个叫httpRouter的玩意;echo不一定用的它,但用的是完全一样的算法。这玩意,性能很高,但有个缺点: 不支持路由排序。

比如: 路由 Get("/name") 和  Get("/:id") ,一般来说,只要把Get("/name")放在Get("/:id")前面,就是不冲突的。路由模块,会先尝试匹配前面那个,没匹配上,再去匹配后面的。

而 gin和echo的路由模块,会认为这两个路由是冲突的。gin会给出提醒,不让编译通过;echo完全不提醒,冲突就冲突了......

由于眼睛看到的路由顺序,不是实际解析的顺序,会导致给路由起名、设计、日后的增加,带来相当多的麻烦,路由冲突变得非常常见。

框架的可持续发展

两个都不够好。

gin的主创是2个大学生。每年寒暑假就频繁更新,快到期末考试了,就完全不更新了。两人不在的时候,有网友在帮忙热情的维护,但主要是修bug、整理中间件。框架本身的发展,还是靠主创寒暑假爆发。就是这样的框架,连csico都在用。。。

好在,gin的代码注释量大,易读性高,便于其他人参与。而且包装中间件,也超级容易。

作者本人的态度是,对于一个在github上,start达到5000+的项目,他怎么可能会不去维护。请大家放心使用,到寒暑假了,他自然会去更新。。。

echo则是主创当前处于活跃状态,并且乐呵呵的想要开发2.0版。由于主创活跃,它自带了一些流行功能,比如 websocket, http2 授权。用gin的话,这些功能要自己包装个中间件,虽然也很容易就是了。

但echo的问题在于,它既没有足够的调试信息,代码也缺少注释。作者现在是在劲头上,等3-6个月,在路上看到个穿超短的妹子,热情转移了,很快就会忘记当时代码是怎么写的。没有注释,不但别人不方便接手,自己也懒得再去看,于是慢慢就永不再更新。

缺少注释的开源包,大部分都有这个问题。echo最终会不会变成这个结局,我们无从得知。

总结

综上,echo的状态是当下主创本人活跃,框架还不太成熟,适合最轻量级服务;

gin则是整体成熟、易于调试,但可以预期,框架本身发展不会太快,除非主创大学毕业,从事和golang相关的工作。

echo的使用方式、命名,都参考了gin,两者很接近,切换框架很容易,所以不用担心选错。

补充: 由于echo的路由冲突非常频繁,而且没有调试信息,在echo提供自动分析路由冲突之前,它不是个合理选择。哪天它提供了,那么它就还不错。

閲完此文,您的感想如何?
  • 有用

    2

  • 沒用

    1

  • 開心

    0

  • 憤怒

    0

  • 可憐

    0

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: PHP+JS聊天群

相關課文
  • GO語言GORM如何更新字段

  • gorm如何創建記錄與模型定義需要注意什麽

  • gorm一般查詢與高級查詢

  • GORM時間戳跟蹤及CURD(增刪改查)

我要說說
網上賓友點評
1 樓 IP 117.174.24.25 的嘉賓 说道 : 1698726243
实在不行用php的workerman和webman的协程也很快的!实测webman的速度比gin都快一倍

2 樓 IP 45.66.249.105 的嘉賓 说道 : 1698817998
楼上的兄弟你是不是对协程有什么误解? 还是卖课的? 真无语, 一个php的异步网络库吹到天上去了