以前项目都是基于 java 的,本着节约服务器资源(省钱)的思想,新项目想用 golang 开发,这两个框架选择哪个比较好?
考虑点主要有:
大家给推荐一下,说一下理由?
1
plutome 2023-02-21 09:00:10 +08:00
选 gin
不建议 go-zero |
2
Nazz 2023-02-21 09:03:36 +08:00
标准库够用了, 没必要上 fasthttp
|
3
coderxy 2023-02-21 09:06:02 +08:00
你原来用 java 的时候是只用了 spring boot 还是 spring cloud 全家桶都上了?
iris 不推荐, gin 对标 spring boot 这种,属于基本的 web 框架 go-zero 对标的是 sc ,属于微服务框架。 如果想简单做几个接口,就 gin 吧。 |
4
echo1937 2023-02-21 09:07:38 +08:00 via iPhone
选择 gjn
|
5
king888 2023-02-21 09:10:13 +08:00 via iPhone
都没什么太大差别,那个顺手用那个
|
6
DefoliationM 2023-02-21 09:13:05 +08:00
net/http
|
7
daiv 2023-02-21 09:14:27 +08:00 2
我用 goframe
|
8
charmToby 2023-02-21 09:14:44 +08:00
go-zero 结合 iris 我公司就这样做的。
|
9
to2false 2023-02-21 09:14:56 +08:00
gin
纯 api 的话非 rpc ,go-zero 不好用 |
10
bv 2023-02-21 09:15:36 +08:00
https://github.com/xgfone/ship 比 gin 好用,就是名气不大
|
11
fiypig 2023-02-21 09:16:26 +08:00
gin 然后需要什么搭什么,后面加入 RPC 也方便的
|
14
NCE OP |
15
xgxtt 2023-02-21 09:22:27 +08:00
gin 上手快一点
|
16
licoycn 2023-02-21 09:22:48 +08:00
gin+自己搭配即可
|
17
feikeq 2023-02-21 09:40:20 +08:00
我觉得 iris 更灵活
|
18
to2false 2023-02-21 09:41:17 +08:00
@NCE #14 gin/iris 搞 http api ,虽然 go-zero 有 http api ,但那套用起来没那么简便
|
20
rickiey 2023-02-21 09:43:58 +08:00
gin / echo
|
21
wunonglin 2023-02-21 09:47:41 +08:00 2
路由里最难用就是 gin 了。echo 是最推荐的
|
22
richangfan 2023-02-21 09:54:14 +08:00
最快的是用 http 标准库,不依赖第三方
|
23
josexy 2023-02-21 10:01:43 +08:00
可以试试 b 站的 kratos ...
|
24
qq976739120 2023-02-21 10:03:20 +08:00
建议 gin+gorm , 不过..真的有必要节约服务器资源吗? 考虑到这一步的大项目还是要好好规划调研下.
|
25
NCE OP @qq976739120 创业公司,锱铢必较
|
27
vultr 2023-02-21 10:25:35 +08:00
|
28
zpfhbyx 2023-02-21 10:27:17 +08:00
试试 fiber?
|
29
securityCoding 2023-02-21 10:35:26 +08:00
一直在等鹅厂内部的 trpc 开源,一个 pb 文件直接出 rpc 和 http ,还挺好用
|
30
tbwisk 2023-02-21 10:39:31 +08:00
自己用 gin 组装一下自己用到的,后续直接套用这个模板 然后填充业务代码..
|
31
mcfog 2023-02-21 10:48:59 +08:00
|
32
keppelfei 2023-02-21 11:00:10 +08:00
节约服务器资源就要换语言吗?这账可能越算越糊涂。
|
33
huihuiHK 2023-02-21 11:13:05 +08:00
gin 好找工作,哈哈
|
34
Nazz 2023-02-21 11:14:02 +08:00
@NCE go-zero 对标的是 kratos 这种微服务解决方案. iris 没用过只知道是基于 fasthttp 的, 比 gin 重一点但功能远不如 go-zero 那么丰富. 看你自己的需求, 没用到 gRPC 的话 gin 够用了.
|
35
iwdmb 2023-02-21 11:15:45 +08:00
|
36
showshowcode 2023-02-21 11:47:17 +08:00
是不是都没用过 fx
|
37
hahasong 2023-02-21 11:54:38 +08:00
gin 最好用
|
38
liuxu 2023-02-21 11:57:08 +08:00
go 省资源看 benchmark 对比,主要选择基于 fasthttp 整合的框架,实测不管是 qps 还是硬件资源消耗,和 axum 这类性能极高的 rust 框架差距不远,从文档和 example 齐全的角度来看,我用了 fiber
https://github.com/smallnest/go-web-framework-benchmark 这是我基于 fiber 写的项目: https://github.com/liuquanhao/moyu |
39
son012 2023-02-21 11:58:17 +08:00
beego 没人推荐么?我最近学习 golang 就是用这个去做的一个公司功能小模块
|
40
zoharSoul 2023-02-21 12:00:56 +08:00
go-zero
|
41
ixixi 2023-02-21 12:02:07 +08:00
长期活跃+稳定的 api 很重要; 我投 gin
|
42
xsen 2023-02-21 12:05:18 +08:00
go-zero
|
43
liuhan907 2023-02-21 12:23:13 +08:00
创业公司,而且还是用过 Java 那一套的,还是纯 WebAPI 的业务,你就用 .NET 那也比 Go 来的更方便啊。。。
|
44
jinzhe 2023-02-21 12:45:19 +08:00
gofiber 路过
|
45
Rainshaw 2023-02-21 12:50:47 +08:00 via iPhone
可以看看 hertz 和 kitex ,我最近在研究中,看文档感觉还可以
|
46
patrickyoung 2023-02-21 13:09:25 +08:00 via iPhone
Gin 和 echo
|
47
czyt 2023-02-21 13:15:32 +08:00
kratos
|
48
chendy 2023-02-21 13:19:10 +08:00
java 农路过,表示服务器资源一般没有人力资源贵…
|
49
RedisMasterNode 2023-02-21 14:07:00 +08:00
重新看了一眼楼主需求:
本着节约服务器资源(省钱)的思想 觉得这个不应该换 golang... |
50
caotian 2023-02-21 14:26:02 +08:00 7
个人的一点经历,仅供参考。
身在小公司, 做过不少创业项目, 几年前 php, springboot, .net core 都做过, 并且目前还在维护着, 但近两年的新项目后端全部使用 gin 了。 选择 gin 主要是以下几个因素, 跟其它几个语言 /框架比起来: 一、php 写的早, 当时还是 php5 写的项目, 维护起来有点痛苦, 特别是经历过几拨人接手过的项目, 数组里面到底有什么太费脑子了。 二、springboot 太消耗资源了, webapi 项目基本上>1G 的内存消耗, 有个项目上了 cloud 微服务, 十来个服务,4 核 16G 的阿里云刚好能跑一套部署。我的项目主要是企业用户,CRM, 进销存等, 访问压力并不大,但是客户用起来,很多会要求有定制内容,定制多点了,就需要单独开发独立部署,成本比较高,如果成本转嫁给客户,客户会觉得软件比较贵,一年多 5000 块钱服务器费用,很多客户会犹豫。而现在容器化部署 go 为主的项目, 一套软件部署 3 个容器, 2 个 nginx:alpine, 1 个 gin, 镜像都只有一二十兆, 内存消耗 3 个容器加起来不到 100 兆, 多台服务器共享负载均衡带宽, 共享 RDS 数据库, 独立部署的成本可以压缩的非常低。 三、.net core 我是从 asp 时代就入行做网站, 后来 asp.net 1.1, 2.0 都用过做过很多中小型网站, 后来几年没接触.net, 但是对.net 还是有情怀的, .net core 发布后, 拾起来做了几个小项目, 并没有特别惊艳的地方, 坦白说 spring 那一套内容需要用到的都学会就已经消耗了大量的精力, .net core 一样有太多需要学习的东西, 年龄大了并不想投入太多时间在这种学习上了, 最终还是选择了 go 。选择 go 的原因就是部署成本低, 语言简陋一点并不是大问题, 说 go 不能写业务的就更不知道为什么了, 有什么样复杂的业务 go 不能写的? asp 都开心地写过几年, go 比 asp 强多了, 而且忘掉架构, 忘掉设计模式, 用脚本一样的写法写 webapi, 做个快快乐乐的 curd boy, 早点下班带孩子, 不是很开心滴么。 题外话,由于项目需要,有些服务需要开发各种能运行在不同终端上的程序, 比如 windows 上的读卡、串口服务, 甚至运行在路由器上的采集程序, 通过 wifi, 蓝牙做数据采集, 这些以前都是.net 开发的, 但是部署起来并不快乐, 很多客户或者设备自带的 windows7 非常老, 甚至没有接入互联网, 部署一个应用会缺少各种各样的依赖, 有的要安装 vc++运行库, 有的要安装系统更新, 每次都提心掉胆地安装, 就怕这几十万的设备带的电脑系统要是挂了, 客户找厂家上门可是要大价钱的,关键还经常报错安装不上依赖。但是自从把这些采集程序换成 go 开发成 windows 服务, 兼容性出奇的好, 从来没需要单独安装什么依赖, 各种架构的 arm, misp 路由器上跑 go 开发的程序资源消耗也非常小, 体验非常好。 |
51
hopingtop 2023-02-21 14:52:47 +08:00 2
如果你还在问选择框架的问题,那么我建议你选择 Gin
理由如下几点: 1.你可能写 Go 语言时间还不长,过于复杂的框架会导致你的学习 /解决问题成本上升,Go 也并不是大家说的那么简单。 2.Gin 的生态比较丰富,虽然我们常用的就是用他的 route ,但是他还有一个 gin-plugin 的一个仓库,里面有比较多的开源中间件,可以使用。 3.Gin 这东西本质上比较简单,而且经过大量项目验证,坑极少,觉得不好用的呢,大多数只是不习惯于罢了,因为可能会被其他框架的写法影响。 4.对于 WebAPI 来说,成本最低,不会依赖于任何东西,对于你以后想转 RPC ,这个其实更多的是考量你代码的组织。我们很多时候,一个 server 方法,是既提供 RPC 调用也提供 HTTP 调用,就是 Handler 转换一下。 5.对于一个东西依赖越少,未来越好做改变,Gin 大概率你也只会用到他的,route 、validator 、middleware 、context ,这些东西大多数都是在你业务逻辑之外的,如果哪天 Gin 不爽了,你大可以换成其他的。 关于选语言,如果你提出 Go 了,就选择它吧,对于创业公司来说,性能和成本真的是很友好,唯一缺点就是有些城市不太好招人。 |
52
Desdemor 2023-02-21 15:42:05 +08:00
gin 简单,
goframe 轮子组件多 |
53
dayeye2006199 2023-02-21 16:13:48 +08:00 via Android
推荐 echo ,简单,常用的功能开箱使用
|
54
apkapb 2023-02-21 16:17:32 +08:00
|
55
sunshengkai27 2023-02-21 16:30:44 +08:00
@zpfhbyx #28 使用 fiber 极大概率会触发 evictCount panic, 最近生产环境遇到了后改成 gin 就正常. 推测是 fasthttp 的问题. https://github.com/golang/go/issues/43048#event-4080325045
|
56
jinsongzhao 2023-02-21 17:50:43 +08:00
@chendy 虽然服务器资源比人便宜,但是重构能力是瓶颈,面对一堆 java 写的屎山,首先得有个能让它脱胎换骨的人,新手可以利用语言优势,缩短于高手的差距。
|
57
guanhui07 2023-02-21 19:08:00 +08:00
建议 gin
|
58
daiv 2023-02-21 19:43:41 +08:00
我想要一个 纯 API 的, 会自动带 swagger ...
|
60
fxjson 2023-02-21 20:13:42 +08:00 via Android
go zero 跟牛掰
|
61
NCE OP |
62
NCE OP @caotian 感谢! 我也是从 asp 开始一路走来的,路径一样。springboot 的内存问题我也是现在开始在乎,成本高了报价又不能高,一个 webjar 用 1g 已经很保守了。.net 从换负责人以后我就带团队全部转 java 了。后来 core 没再接触。现在就考虑 php 的性价比,看看 go 是不是可以,像你说的,可以服务器端资源节省下来。
dotnet 的串口开发是个伪需求,还是需要 com+去调用,我之前甚至看过 net 的嵌入式开发,比较虚。 你说的 3 个容器,2 个 nginx:alpine 是部署前端站点当 cdn 吗?为什么部署 2 个呢? |
63
NCE OP |
65
lrvy 2023-02-21 20:51:05 +08:00
可以试试字节开源的框架
* RPC: https://www.cloudwego.io/zh/docs/kitex/ * HTTP API: https://www.cloudwego.io/zh/docs/hertz/ |
66
lesismal 2023-02-21 21:35:20 +08:00
只做 api 的话,可以试试我这个,可以用 websocket ,也可以用 http:
https://github.com/lesismal/arpc/tree/master/examples/webchat |
67
lesismal 2023-02-21 21:36:41 +08:00
前端请求 api/rpc ,后端之间 rpc 都一套就能搞定搞定,自带了简单的 pub/sub 扩展,也方便
|
68
realpg 2023-02-21 22:28:41 +08:00
gin
|
69
realpg 2023-02-21 22:30:36 +08:00
@caotian
`选择 go 的原因就是部署成本低, 语言简陋一点并不是大问题, 说 go 不能写业务的就更不知道为什么了, 有什么样复杂的业务 go 不能写的? asp 都开心地写过几年, go 比 asp 强多了, 而且忘掉架构, 忘掉设计模式, 用脚本一样的写法写 webapi, 做个快快乐乐的 curd boy, 早点下班带孩子, 不是很开心滴么。` 说的太对了 然后发现,忘掉架构, 忘掉设计模式,不带脑子的去写 golang crud ,性能起飞,服务器内存还 95%空闲 |
70
hundandadi 2023-02-21 23:11:29 +08:00 via Android
@chendy 公司降本增效的时候,就是用人力来节约服务器资源
|
71
someonedeng 2023-02-21 23:39:45 +08:00
gin / fiber
轻装上阵 大多数场景都够用了 |
72
isma123 2023-02-22 00:04:15 +08:00
如果没有 rpc 需求,不建议用 go-zero
lris 没接触过 平时用 gin 比较多,gin 是真的好用 |
73
liuhan907 2023-02-22 00:13:00 +08:00
@NCE 这是前辈了啊。我现在做游戏带队用 Orleans+.NET 7+EFCore 7 。感觉真的挺舒服的,就是另一个老项目升不上来版本非常蛋疼。维护两套东西脑子经常转不过来。上上个项目我们用 Go 做的比赛匹配,但是团队成员反应都不太好。感觉写起来麻烦,后来调研之后就换现在的技术栈了。
|
74
yrj 2023-02-22 05:24:58 +08:00
gofiber + 1
|
75
sunmoon1983 2023-02-22 09:00:54 +08:00
我用 GoFrame
|
76
wupher 2023-02-22 09:03:58 +08:00
@caotian 握手
我们也是差不多历程。 最早的项目 ThinkPHP ,简直就是屎山。 后来的项目 SpringBoot + Spring Cloud 上云后内存消耗太高,服务器资源高。给客户独立部署在报价上就没太多竞争力。 |
77
macscsbf 2023-02-22 09:11:56 +08:00
gin 依赖比较少,但是这样会导致集成其他功能时很多包要自己去搜索与尝试。如果你是希望有集成好的东西,我觉得 go-zero 可能会比较好吧。
|
78
hoopan 2023-02-22 09:26:50 +08:00
用过 gin 还不错
|
79
qW7bo2FbzbC0 2023-02-22 09:42:41 +08:00
@liuhan907 #73 Orleans 到底是什么作用,问一下,是微服务框架?
|
80
qW7bo2FbzbC0 2023-02-22 09:43:15 +08:00
简单些的话,其实 net/http + 三方 mux 插件 + sqlx 手写 sql 就够了
|
81
xqcode 2023-02-22 09:45:31 +08:00
gin
|
82
caotian 2023-02-22 09:46:40 +08:00 2
使用两个 nginx:alpine 容器是因为项目有管理后台和微信公众号,是两个不同的开发项目, 有不同的 ci 发布流程, 还不是同一个前端同事维护的, 只能给他们两个容器。现在公司又提了接入企业微信, 有点怕要再加个容器。
目前 springboot 的项目还在销售,设计的时候选择了 mongodb 作为数据库, 医疗体检类的应用, 体检数据用 mongodb 保存太省事了, 所以现在独立部署的成本很高。我推荐的配置是阿里云的负载均衡+两台 4 核 16G 的 ecs+1 个 2 核 4G 的 mongodb 实例, 算起来就算是新用户也要 1.2 万+, 续费更是 1.5~2 万了, 目前来看, 即使是医院, 肯出这个钱的都不多, 大多是让我提最低配置, 最好一台 ECS 搞定, 就最低配置的一年也做不到低于 5000. 选择低配运维压力也要压到自己身上, 还好只备份个数据库, 定期检查一下就好了。有些客户不允许部署在云上,需求提给单位的机房,IT 部门必定会打电话过来`砍价`, 就算他们全是虚拟机,也不打算给这么多资源,除非我们连硬件也给他们提供了。 相比之下 go 开发的项目部署起来就快乐多了, 客户愿意我就给独立部署, 反正一个 docker compose 几秒钟起来了, 1 台 2000 块钱的服务器部署几十个客户也没太大波动, 前面加上负载均衡, 哪怕一台也加, 既共享了带宽,又方便解决故障,服务器真有点波动, 随时换一台切换一下负载均衡后端,很快就能解决,同时 ssl 证书什么的更换也很方便。 |
83
waltcow 2023-02-22 09:55:32 +08:00
go-zero 效率还可以, 支持 template 定制,不行也可以直接魔改 core 加 feature
|
84
sparklee 2023-02-22 10:33:28 +08:00
从最基础的开始搞, 一切尽在掌握, 或者提前用完整的解决方案
|
85
cookgo 2023-02-22 10:33:29 +08:00
选 GoFrame https://goframe.org/
|
86
guanzhangzhang 2023-02-22 11:24:19 +08:00
gin 没有整合 orm 啥的,很轻量,iris 作者篡改 git commit 记录,还干架,名声不好
|
87
cnbattle 2023-02-22 11:26:41 +08:00
在用 gin 和 go-zero, 推荐 gin, 简单好用,
go-zero 有个坑,自动生成代码,无法接收 form data 二进制文件,有用户反馈这个问题,但作者没接受, 个人理解 web 框架层该支持所有 http 标准,不该这样, 魔改可以实现,但工作流变了,有点难受 0.0 |
88
liuxu 2023-02-22 12:23:36 +08:00
@daiv #59 直接使用 fiber 提供的 swagger 呢,https://github.com/gofiber/swagger
|
89
xiaocaiji111 2023-02-22 14:15:02 +08:00
语言主要考虑的是生态,比如一些第三方服务,go 的 sdk 就没有,或者有 github 上一看个人作者很久没维护也不敢用。这个也算是个成本。
|
90
daiv 2023-02-23 08:46:08 +08:00
|
91
NCE OP @liuhan907 可以看看这个 ORM: https://github.com/leadnt/fluentdao ,我之前维护的。
|