go Web 框架 一般得学哪款比较好呢?

php,我学的是laravel,go得学习哪款比较好呢

本作品采用《CC 协议》,转载必须注明作者和本文链接
luoyeyuzhou
讨论数量: 11

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

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

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

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

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

goframe gmap组件单线程去对比测试 sync.Map(19年8月前修复了),大部分代码是工具相关内容。单元测试: 69%

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

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


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

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

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

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

3年前 评论
duxphp 1年前
1112 (作者) 1年前

gin用的人多,buffalo比较像laravel,iris也行,都用用对比对比

3年前 评论

大部分人用的gin ,不过使用哪种框架主要是看公司需要,或者公司使用的是哪一款,你只要有扎实的Go基础,框架应该会很容易上手的

3年前 评论

beego 上手简单。文档比较全。

3年前 评论

beego, goframe这两个 都是国人开发的,中文文档也比较友好,gin,echo,iris这些都是比较火的框架

3年前 评论

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

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

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

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

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

goframe gmap组件单线程去对比测试 sync.Map(19年8月前修复了),大部分代码是工具相关内容。单元测试: 69%

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

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


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

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

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

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

3年前 评论
duxphp 1年前
1112 (作者) 1年前

目前也是初学,框架感觉不用多学。先用一个做东西(实现功能优先级最高)。慢慢再深入看源码。还是先适合自己用,再来稿深入的东西。再选框架的时候问了问朋友公司的情况,发现没啥借鉴。公司用的是他们编写的框架。 :joy:

3年前 评论

推荐 gin 和 echo,目前都在用

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!