17

golang 快速开发,应该选择 go-zero,还是 Iris?

 1 year ago
source link: https://www.v2ex.com/t/917798
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  程序员

golang 快速开发,应该选择 go-zero,还是 Iris?

  NCE · 18 小时 10 分钟前 · 3700 次点击

以前项目都是基于 java 的,本着节约服务器资源(省钱)的思想,新项目想用 golang 开发,这两个框架选择哪个比较好?

考虑点主要有:

  1. 技术栈全面,主要是 web api

大家给推荐一下,说一下理由?

73 条回复    2023-02-22 00:13:00 +08:00
plutome

plutome      18 小时 8 分钟前

选 gin

不建议 go-zero
Nazz

Nazz      18 小时 5 分钟前

标准库够用了, 没必要上 fasthttp
coderxy

coderxy      18 小时 3 分钟前

你原来用 java 的时候是只用了 spring boot 还是 spring cloud 全家桶都上了?

iris 不推荐, gin 对标 spring boot 这种,属于基本的 web 框架
go-zero 对标的是 sc ,属于微服务框架。

如果想简单做几个接口,就 gin 吧。
echo1937

echo1937      18 小时 1 分钟前 via iPhone

选择 gjn
king888

king888      17 小时 58 分钟前 via iPhone

都没什么太大差别,那个顺手用那个
DefoliationM

DefoliationM      17 小时 56 分钟前

net/http
daiv

daiv      17 小时 54 分钟前   ❤️ 1

我用 goframe
charmToby

charmToby      17 小时 54 分钟前

go-zero 结合 iris 我公司就这样做的。
to2false

to2false      17 小时 54 分钟前

gin

纯 api 的话非 rpc ,go-zero 不好用
fiypig

fiypig      17 小时 52 分钟前

gin 然后需要什么搭什么,后面加入 RPC 也方便的
NCE

NCE      17 小时 51 分钟前

@coderxy 后面 spring cloud 都上了,但前期类似先把 springboot 跑起来
NCE

NCE      17 小时 50 分钟前

@to2false
@fiypig

gin 和 go-zero 还不是一个层级的东西是吧? go-zero 和 iris 更偏后面 rpc ?
xgxtt

xgxtt      17 小时 46 分钟前

gin 上手快一点
licoycn

licoycn      17 小时 46 分钟前

gin+自己搭配即可
feikeq

feikeq      17 小时 28 分钟前

我觉得 iris 更灵活
to2false

to2false      17 小时 27 分钟前

@NCE #14 gin/iris 搞 http api ,虽然 go-zero 有 http api ,但那套用起来没那么简便
to2false

to2false      17 小时 26 分钟前

@to2false #18 发现 iris 更新了好多特性,但看选择吧
rickiey

rickiey      17 小时 25 分钟前

gin / echo
wunonglin

wunonglin      17 小时 21 分钟前   ❤️ 2

路由里最难用就是 gin 了。echo 是最推荐的
richangfan

richangfan      17 小时 14 分钟前

最快的是用 http 标准库,不依赖第三方
josephxrays

josephxrays      17 小时 7 分钟前

可以试试 b 站的 kratos ...
qq976739120

qq976739120      17 小时 5 分钟前

建议 gin+gorm , 不过..真的有必要节约服务器资源吗? 考虑到这一步的大项目还是要好好规划调研下.
NCE

NCE      16 小时 55 分钟前

@qq976739120 创业公司,锱铢必较
to2false

to2false      16 小时 48 分钟前

@NCE #25 创业公司哪个熟练用哪个,人力比起你这服务器贵多了
zpfhbyx

zpfhbyx      16 小时 41 分钟前

试试 fiber?
securityCoding

securityCoding      16 小时 33 分钟前

一直在等鹅厂内部的 trpc 开源,一个 pb 文件直接出 rpc 和 http ,还挺好用
tbwisk

tbwisk      16 小时 29 分钟前

自己用 gin 组装一下自己用到的,后续直接套用这个模板 然后填充业务代码..
keppelfei

keppelfei      16 小时 8 分钟前

节约服务器资源就要换语言吗?这账可能越算越糊涂。
huihuiHK

huihuiHK      15 小时 56 分钟前

gin 好找工作,哈哈
Nazz

Nazz      15 小时 55 分钟前

@NCE go-zero 对标的是 kratos 这种微服务解决方案. iris 没用过只知道是基于 fasthttp 的, 比 gin 重一点但功能远不如 go-zero 那么丰富. 看你自己的需求, 没用到 gRPC 的话 gin 够用了.
iwdmb

iwdmb      15 小时 53 分钟前

Go 纯 API 框架推
https://github.com/labstack/echo
QPS 10000+ 的项目稳定运作
相当稳定、可靠
showshowcode

showshowcode      15 小时 21 分钟前

是不是都没用过 fx
hahasong

hahasong      15 小时 14 分钟前

gin 最好用
liuxu

liuxu      15 小时 11 分钟前

go 省资源看 benchmark 对比,主要选择基于 fasthttp 整合的框架,实测不管是 qps 还是硬件资源消耗,和 axum 这类性能极高的 rust 框架差距不远,从文档和 example 齐全的角度来看,我用了 fiber

https://github.com/smallnest/go-web-framework-benchmark

这是我基于 fiber 写的项目: https://github.com/liuquanhao/moyu
son012

son012      15 小时 10 分钟前

beego 没人推荐么?我最近学习 golang 就是用这个去做的一个公司功能小模块
zoharSoul

zoharSoul      15 小时 8 分钟前

go-zero
ixixi

ixixi      15 小时 6 分钟前

长期活跃+稳定的 api 很重要; 我投 gin
xsen

xsen      15 小时 3 分钟前

go-zero
liuhan907

liuhan907      14 小时 45 分钟前

创业公司,而且还是用过 Java 那一套的,还是纯 WebAPI 的业务,你就用 .NET 那也比 Go 来的更方便啊。。。
jinzhe

jinzhe      14 小时 23 分钟前

gofiber 路过
Rainshaw

Rainshaw      14 小时 18 分钟前 via iPhone

可以看看 hertz 和 kitex ,我最近在研究中,看文档感觉还可以
patrickyoung

patrickyoung      13 小时 59 分钟前 via iPhone

Gin 和 echo
czyt

czyt      13 小时 53 分钟前

kratos
chendy

chendy      13 小时 49 分钟前

java 农路过,表示服务器资源一般没有人力资源贵…
RedisMasterNode

RedisMasterNode      13 小时 2 分钟前

重新看了一眼楼主需求:
本着节约服务器资源(省钱)的思想

觉得这个不应该换 golang...
caotian

caotian      12 小时 43 分钟前   ❤️ 5

个人的一点经历,仅供参考。
身在小公司, 做过不少创业项目, 几年前 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 开发的程序资源消耗也非常小, 体验非常好。
hopingtop

hopingtop      12 小时 16 分钟前   ❤️ 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 了,就选择它吧,对于创业公司来说,性能和成本真的是很友好,唯一缺点就是有些城市不太好招人。
Desdemor

Desdemor      11 小时 27 分钟前

gin 简单,
goframe 轮子组件多
dayeye2006199

dayeye2006199      10 小时 55 分钟前 via Android

推荐 echo ,简单,常用的功能开箱使用
sunshengkai27

sunshengkai27      10 小时 38 分钟前

@zpfhbyx #28 使用 fiber 极大概率会触发 evictCount panic, 最近生产环境遇到了后改成 gin 就正常. 推测是 fasthttp 的问题. https://github.com/golang/go/issues/43048#event-4080325045
jinsongzhao

jinsongzhao      9 小时 18 分钟前

@chendy 虽然服务器资源比人便宜,但是重构能力是瓶颈,面对一堆 java 写的屎山,首先得有个能让它脱胎换骨的人,新手可以利用语言优势,缩短于高手的差距。
guanhui07

guanhui07      8 小时 1 分钟前

建议 gin
daiv

daiv      7 小时 25 分钟前

我想要一个 纯 API 的, 会自动带 swagger ...
daiv

daiv      7 小时 23 分钟前

@liuxu #38 @jinzhe #44 fiber 无法加载 go-swagger
fxjson

fxjson      6 小时 55 分钟前 via Android

go zero 跟牛掰
NCE

NCE      6 小时 49 分钟前

@liuhan907 .net 搞了 10 来年,后来.NET 的红衣教主不再负责.net ,去负责 azure 后,我就带团队转 java 了。
NCE

NCE      6 小时 43 分钟前

@caotian 感谢! 我也是从 asp 开始一路走来的,路径一样。springboot 的内存问题我也是现在开始在乎,成本高了报价又不能高,一个 webjar 用 1g 已经很保守了。.net 从换负责人以后我就带团队全部转 java 了。后来 core 没再接触。现在就考虑 php 的性价比,看看 go 是不是可以,像你说的,可以服务器端资源节省下来。

dotnet 的串口开发是个伪需求,还是需要 com+去调用,我之前甚至看过 net 的嵌入式开发,比较虚。

你说的 3 个容器,2 个 nginx:alpine 是部署前端站点当 cdn 吗?为什么部署 2 个呢?
NCE

NCE      6 小时 42 分钟前

@caotian 我从 asp,php,asp.net 1.0,2.0,4.0 ,到 java, 从 2003 年到现在 20 年了,哈哈哈,不想折腾了,止于 CRUD 安安稳稳做点可持续的业务吧。
NCE

NCE      6 小时 40 分钟前

@hopingtop 自己先折腾,2019 年辞职出来创业,3 年疫情已经只差最后一根稻草了,今年再扑腾扑腾。
lesismal

lesismal      5 小时 32 分钟前

前端请求 api/rpc ,后端之间 rpc 都一套就能搞定搞定,自带了简单的 pub/sub 扩展,也方便
realpg

realpg      4 小时 40 分钟前

realpg

realpg      4 小时 38 分钟前

@caotian
`选择 go 的原因就是部署成本低, 语言简陋一点并不是大问题, 说 go 不能写业务的就更不知道为什么了, 有什么样复杂的业务 go 不能写的? asp 都开心地写过几年, go 比 asp 强多了, 而且忘掉架构, 忘掉设计模式, 用脚本一样的写法写 webapi, 做个快快乐乐的 curd boy, 早点下班带孩子, 不是很开心滴么。`

说的太对了

然后发现,忘掉架构, 忘掉设计模式,不带脑子的去写 golang crud ,性能起飞,服务器内存还 95%空闲
hundandadi

hundandadi      3 小时 57 分钟前 via Android

@chendy 公司降本增效的时候,就是用人力来节约服务器资源
someonedeng

someonedeng      3 小时 29 分钟前

gin / fiber

轻装上阵 大多数场景都够用了
isma123

isma123      3 小时 4 分钟前

如果没有 rpc 需求,不建议用 go-zero
lris 没接触过
平时用 gin 比较多,gin 是真的好用
liuhan907

liuhan907      2 小时 56 分钟前

@NCE 这是前辈了啊。我现在做游戏带队用 Orleans+.NET 7+EFCore 7 。感觉真的挺舒服的,就是另一个老项目升不上来版本非常蛋疼。维护两套东西脑子经常转不过来。上上个项目我们用 Go 做的比赛匹配,但是团队成员反应都不太好。感觉写起来麻烦,后来调研之后就换现在的技术栈了。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK