2023 年了, GoWeb 应该选择 Goframe、Gin、Beego、Iris 哪一项? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
这是一个创建于 935 天前的主题,其中的信息可能已经有所发展或是发生改变。

op 最近在从 Java 的 SpringBoot 框架转向 Go 开发(大三学生),看了 Go 的一些框架,发现主流的有 Goframe 、Gin 、Beego 、Iris ,不知道目前哪个是最好用的?或者说现在企业一般在用什么框架?

58 条回复    2023-06-16 18:24:43 +08:00
cmdOptionKana
    1
cmdOptionKana  
   2023-04-06 22:00:51 +08:00   2
go web 框架之间的差别很小,主要因为标准库在这方面太强大了,框架只能简单地包一层,因此你可以先随便挑一个学,再学另一个框架是毫无难度的
Seanfuck
    2
Seanfuck  
   2023-04-06 22:05:31 +08:00   1
推荐 Gin 的最多
yrj
    3
yrj  
   2023-04-06 22:33:47 +08:00   2
gf 和 beego 都是国人开发的大而全的框架,gf 是新开发的,beego 早一些。
gin 和 iris 是精小的框架。gin 知名度最高,iris 的特点是底层用的 fasthttp ,都说性能更好。
我推荐另一款框架,gofiber ,后起之秀,功能较多,但不是啥都大包大揽,还是围绕在框架本身。底层也是 fasthttp 。
用它写过了一些项目,没遇到明显的坑。
yl20181003
    4
yl20181003  
   2023-04-06 22:35:41 +08:00 via Android
gin 用的人多,个人比较倾向于 go fiber
ThinkStu
    5
ThinkStu  
OP
   2023-04-06 22:39:18 +08:00
@yrj #3 谢谢前辈指导。又让我开阔了眼界...
shakaraka
    6
shakaraka  
PRO
   2023-04-06 22:41:54 +08:00   1
go echo 。gin 的路由太难用了,而且官网超拉
mingqing
    7
mingqing  
   2023-04-06 22:58:53 +08:00
我用 grpc 然后自己包装下
hyqCrystal
    8
hyqCrystal  
   2023-04-06 23:04:36 +08:00
gogogo
ClericPy
    9
ClericPy  
   2023-04-07 00:01:08 +08:00
外行表示... 你发的顺序似乎就是目前流行程度, gf 比较新但是挺多人推荐的
mrtn08
    10
mrtn08  
   2023-04-07 00:15:10 +08:00
没必要这么卡技术栈,何况还是在校生
neoblackcap
    11
neoblackcap  
   2023-04-07 00:34:47 +08:00
如果只是 web 框架,目前绝大多数都是在 go 的 net 标准库上实现路由系统以及中间件系统而已。没有太多区别。有区别的,往往不是那么主流
qfdk
    12
qfdk  
PRO
   2023-04-07 04:33:08 +08:00
选择 Gin,当然选择一个 简单的,然后明白了原理,其实就那些玩意儿,选择一个第三方库最多的. 社区活跃的.
qfdk
    13
qfdk  
PRO
   2023-04-07 04:42:08 +08:00
说几个比较重要的点吧:
- 路由方不方便
- 中间件支持如何,开发方便不
- 错误处理如何
- 环境变量
- orm 支持
- 看看有没有 demo 来看下项目结构,好的项目结构后面维护的时候会很方便
YuuuuuuH
    14
YuuuuuuH  
   2023-04-07 05:28:47 +08:00
Goframe 这个框架在接口这一层很难写单元测试。在做框架选型的时候要考虑一下有没有容易写单元测试的。
SenLief
    15
SenLief  
   2023-04-07 07:23:41 +08:00 via iPhone
你还是学生在学习阶段,没用在具体项目上,为啥直接用框架呢?不如从网络开始呢,标准库那么强大,值得学习一下。
Nazz
    16
Nazz  
   2023-04-07 08:18:23 +08:00 via Android
试试 fiber 吧,gin 的路由中间件不错但 codec 不太行,beego 不推荐
volCan0
    17
volCan0  
   2023-04-07 08:22:01 +08:00
go fiber
djoiwhud
    18
djoiwhud  
   2023-04-07 08:26:43 +08:00 via Android
gin
unfurl
    19
unfurl  
   2023-04-07 09:10:29 +08:00
jorneyr
    20
jorneyr  
   2023-04-07 09:48:13 +08:00
我选择了 Gin ,看一会文档就会使用了。
pkoukk
    21
pkoukk  
   2023-04-07 10:25:36 +08:00
不推荐使用 bee go 和 gf 这种框架
架构还是得自己搞,适合自己的最好,大包大揽的框架里有时候想实现某些东西的时候会非常非常别扭
hahasong
    22
hahasong  
   2023-04-07 10:57:00 +08:00
想要上手快 文档全 API 直观的肯定是 gin 了
AnroZ
    23
AnroZ  
   2023-04-07 11:10:52 +08:00
不想太折腾,选 Gin 会好一些。

个人几年前随机选了 echo ,也还行吧,一直用到现在。但生态差很多,很多第三库没人维护,遇到 bug 需要自己去解决。
ikaros
    24
ikaros  
   2023-04-07 11:12:45 +08:00
1l 说完了,gin echo iris 之类的都差不多,用一个之后其他的基本就会了,我一直用的 echo
huihuiHK
    25
huihuiHK  
   2023-04-07 11:19:30 +08:00
学生的话,建议先直接用 net 标准库,然后再用这些框架。
PureWhiteWu
    26
PureWhiteWu  
   2023-04-07 11:27:38 +08:00   1
Hertz 比较好
justseemore
    27
justseemore  
   2023-04-07 11:27:56 +08:00
go fiber
liuxu
    28
liuxu  
   2023-04-07 11:47:34 +08:00
gofiber 从维护积极性、文档组件齐全程度、易用度、qps 性能、硬件资源消耗五边图来看,应该是个五边形战士

gin 用的人多,star 最多,但是性能属于中等级别
RedisMasterNode
    29
RedisMasterNode  
   2023-04-07 11:51:59 +08:00
感觉性能开销其实对于比较重的业务来说差异不是很大,最好选一个生态比较完善的框架,其他框架不太了解,gin 使用下来大部分 middleware 都有现成的,社区讨论的人也挺多,google 找问题好找。
其他框架也可以分析一下看看,我觉得框架主要在于我能随时找到我要的组件并集成进来,有问题能找到解决方案,就比较满意了。
CharingCrossRoad
    30
CharingCrossRoad  
   2023-04-07 11:56:04 +08:00
gin
Nazz
    31
Nazz  
   2023-04-07 12:05:48 +08:00 via Android
试试 fiber 吧,gin 的路由中间件不错但 codec 不太行,beego 不推荐
gxm44
    32
gxm44  
   2023-04-07 13:35:02 +08:00
echo
stephenhero
    33
stephenhero  
   2023-04-07 13:45:27 +08:00
kitex
Jammar
    34
Jammar  
   2023-04-07 14:13:11 +08:00
net/http
nginxxx
    35
nginxxx  
   2023-04-07 14:26:07 +08:00
fiber +1
epis2048
    36
epis2048  
   2023-04-07 14:32:18 +08:00
我用的 Hertz
JKeita
    37
JKeita  
   2023-04-07 14:46:42 +08:00
我的建议是老老实实学 java ,不然你以后工作都难找。
Oktfolio
    38
Oktfolio  
   2023-04-07 14:49:15 +08:00
用 :param 作为路径参数的我都不考虑
aw2350
    39
aw2350  
   2023-04-07 14:52:15 +08:00
首先排除 gf
fiypig
    40
fiypig  
   2023-04-07 14:56:53 +08:00
现在 Beego 还能上比较吗
iyaozhen
    41
iyaozhen  
   2023-04-07 15:20:32 +08:00   1
推荐我厂的 Hertz

没遇到什么坑
iyaozhen
    42
iyaozhen  
   2023-04-07 15:22:00 +08:00
@iyaozhen 至少内外部同源的,内部的包只是加了一些内部基建的适配,套了个壳,底层还是 import 了 GitHub 上面的包
Hathaway
    43
Hathaway  
   2023-04-07 17:03:35 +08:00
go fiber ,现在就在用 fiber + nextjs 写一个自己的玩具项目,遇到问题的时候,查询 fiber 的文档都有解释。
mmdsun
    44
mmdsun  
   2023-04-07 18:15:33 +08:00
go zero 有人用么?

https://go-zero.dev/cn/
IIInsomnia
    45
IIInsomnia  
   2023-04-07 18:20:34 +08:00
yiigo + chi
ThinkStu
    46
ThinkStu  
OP
   2023-04-07 19:48:37 +08:00
@mmdsun #44 终于有人说这个了...
ThinkStu
    47
ThinkStu  
OP
   2023-04-07 19:49:09 +08:00
@mmdsun #44 我有一个小项目,昨天告诉我可能要用 zero
unlighted
    48
unlighted  
   2023-04-07 20:06:18 +08:00
gf 吧,文档以及相关应用都蛮充分.比较好学习
gddg
    49
gddg  
   2023-04-07 22:18:39 +08:00
@mingqing 请问处理 PB struct 转成 json,未赋值字段, json 相关 KEY 被省略掉.你是怎么处理的? 我设置了序列化参数 . 另外,PB 结构体数组类型进行 json 序列化, 是 PB 定义一个 list 来处理吗?
mingqing
    50
mingqing  
   2023-04-07 22:52:07 +08:00
@gddg 生成的 PB 属性默认都是 json:"uuid,omitempty",要么通过 protoc-X 工具去自定义干预 json 定义,如 protoc-gen-gogo 或者设置序列化参数,或序列化使用 `protobuf:name=uuid,proto3"` 中的 name 作为 json 序列化的参数名。
ixixi
    51
ixixi  
   2023-04-08 11:10:36 +08:00
gin 吧

api 稳定很重要 不能光看他有啥功能,给你整一个大升级 比较难搞
349865361
    52
349865361  
   2023-04-11 10:27:53 +08:00
go fiber 挺不错
webcape233
    53
webcape233  
   2023-04-15 23:38:23 +08:00 via iPhone
gin 最多,但是我觉得 echo 更好用呢
skyenought
    54
skyenought  
   2023-04-20 00:14:32 +08:00
@PureWhiteWu 咱推荐框架怎么也应该来个地址吧 purewhite ?

https://github.com/cloudwego/hertz

Hertz 是一个 Golang 微服务 HTTP 框架,在设计之初参考了其他开源框架 fasthttp 、gin 、echo 的优势,并结合字节跳动内部的需求,使其具有高易用性、高性能、高扩展性等特点,目前在字节跳动内部已广泛使用。如今越来越多的微服务选择使用 Golang ,如果对微服务性能有要求,又希望框架能够充分满足内部的可定制化需求,Hertz 会是一个不错的选择
jack139
    55
jack139  
   2023-04-20 09:58:07 +08:00
一直用这个 github.com/valyala/fasthttp ,记得好像不支持 http2.0 ,其他都 ok
xsen
    56
xsen  
   2023-04-28 23:39:22 +08:00
go-zero
gddg
    57
gddg  
   2023-05-05 09:09:08 +08:00
@mingqing 谢谢...这个方法对我来说,太繁琐了...我找了一个简单粗暴的办法.....
#json 小写
sed -i.bak 's/\(json:"\)\([A-Za-z]\+\)\(.*"\)/\1\L\2\3/g' server.pb.go
#json
sed -i 's/,omitempty//g' server.pb.go
jiekeop
    58
jiekeop  
   2023-06-16 18:24:43 +08:00
@Hathaway 老哥 go fibber 怎么断点啊
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4152 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 27ms UTC 05:31 PVG 13:31 LAX 22:31 JFK 01:31
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86