2020 年末了,目前的 Go web 框架怎么选?

2020-12-01 14:34:53 +08:00
 HaroldChen

想用 Go 写点东西,看了不少帖子,gin, echo 的名字出现的频率很高,后来发现了 iris,看了框架作者的对比 https://github.com/kataras/iris/issues/1396,觉得也有一定优势。

目前的疑问是,为什么 gin 的热度这么高呢(先发优势+易用性?),iris 是否可以考虑使用,缺陷在哪?

21147 次点击
所在节点    Go 编程语言
70 条回复
eudore
2020-12-02 09:40:28 +08:00
@ohoh 我写了顺序级别 就按顺序推荐吧。
jmyz0455
2020-12-02 09:49:02 +08:00
@eudore 看上去 echo gin 二选一?
yuchenyang1994
2020-12-02 09:53:27 +08:00
buffalo
Yoock
2020-12-02 10:46:15 +08:00
@jmyz0455 echo 和 gin 用起来没有太大的差别
eudore
2020-12-02 11:10:48 +08:00
@jmyz0455 echo gin 是差不多,但是我根喜欢 echo,1 、内存 Logger 不需要调用一个方法后收到输出 err,如果有错误内置 err 会自动输出。2 、echo.Context 是一个接口,可以自己去 Warp 定义其他行为 3 、echo 的路由器比 gin 使用的 httprouter 更强,性能差不多在一个级别内,但是 echo 实现了路由优先级。
eudore
2020-12-02 11:13:48 +08:00
内置 Logger 不需要在调用一个方法后手动输出 err,如果有错误内置 Logger 会自动输出,debug 时也不会忽略掉错误。例如 session.Store 方法就返回了一个 err,如果有内置 Logger 就会自动打印,debug 时一眼就看出来了。
kevinwan
2020-12-02 11:54:40 +08:00
@eudore 可以评测下 go-zero🤝
qianxiaoxiao
2020-12-02 11:58:07 +08:00
喜欢简单的用 gin 喜欢大而全的用 beego
Hanggi
2020-12-02 12:59:32 +08:00
@eudore

感觉就是对编程思想理解的差别。
你的几个需求点明显是把其他语言里的惯用思想带了进来。

Go 语言提倡遇到错误就立刻处理它,而不是攒到一起再统一处理。
context 不知道是不是你传进 goroutine 里去了,但也不应该把 ctx 传进业务逻辑代码里。
gin.context 是带扩展功能的,估计你想在 context 添加函数,明显也是从其他语言带进来的习惯。
httprouter 的问题也有很多不错的解决方法。

框架这种东西还是用的人多才是硬道理,当年 Node.js 的 koa 框架都说好,到头来标配还是 express 。
当然真要用的话看个人喜好,但新手还是推荐 gin 。
bsg1992
2020-12-02 13:12:55 +08:00
用 go 搞 web 为什么不用 java .net php
cmdOptionKana
2020-12-02 13:14:06 +08:00
初次玩 Go 可以随便选择一个入门,echo, gin, net/http 都很好,也都差别不大。我玩过这些,现在看大家推荐发现了 fiber, 有点意思,下次就玩 fiber 了。
jmyz0455
2020-12-02 13:43:33 +08:00
@eudore 我好像被降权了,我给你回复你能看见有提醒吗?
eudore
2020-12-02 13:58:43 +08:00
@Hanggi
1 、context 和 gin.context 不能 go,context 会错误释放,gin.context 这样的都会出并发问题,的这点我清楚,fiber 里面就有这样错误(没单元测试测),context 我会作为业务的 ctx 使用,例如 sql.DB 操作使用 http 创建的 ctx 作为参数使用。
2 、扩展我们可能说的不是一个维度,扩展一是闭包所有框架都可以使用,但是要手动去闭包,扩展二是对象装饰(我好像没有场景);无入侵添加额外函数我自己低性能损耗(框架部分 1%不到)也实现了,另外我没有其他语言的习惯,在使用 go 之前就轻度使用过 django 实现不到 10 个 api 。
3 、httprouter 缺陷没有方法无入侵解决,结构体定义死了,只能重新实现。
eudore
2020-12-02 14:02:10 +08:00
@kevinwan 微服务玩了不深,没法能力评测 gozero,jaeger 、consul 、prometheus 我也才基本使用,http 我是都看过了也都写过了。
ewBuyVmLZMZE
2020-12-02 14:04:18 +08:00
gin 的包装不错,另外就是 echo 强烈安利,至于其他的,我个人就不推荐了。
eudore
2020-12-02 14:04:24 +08:00
@jmyz0455 我看见了,觉得二选一这样简单问题没必要回复你,你自己随意拉都差不多,goweb 这坑又不深,学好 nethttp 就啥都不怕。
jmyz0455
2020-12-02 14:42:49 +08:00
@eudore 非常感谢🙏
zhdsuperm
2020-12-02 17:03:21 +08:00
@bsg1992 你看他机器,内存应该不行,我觉得 go 最好,万一业务成功了,还能拓展
windfarer
2020-12-02 17:19:03 +08:00
几年前我们写的时候都是用 mux 做路由,后面直接挂官方 http 库的 handler 的,不知道为啥现在都搞得这么复杂
kevinwan
2020-12-02 19:11:29 +08:00
@windfarer 服务治理能力和工程化工具

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/730965

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX