V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NCE
V2EX  ›  程序员

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

  •  
  •   NCE · 2023-02-21 08:58:11 +08:00 · 9258 次点击
    这是一个创建于 423 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    考虑点主要有:

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

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

    92 条回复    2023-02-23 13:28:50 +08:00
    plutome
        1
    plutome  
       2023-02-21 09:00:10 +08:00
    选 gin

    不建议 go-zero
    Nazz
        2
    Nazz  
       2023-02-21 09:03:36 +08:00
    标准库够用了, 没必要上 fasthttp
    coderxy
        3
    coderxy  
       2023-02-21 09:06:02 +08:00
    你原来用 java 的时候是只用了 spring boot 还是 spring cloud 全家桶都上了?

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

    如果想简单做几个接口,就 gin 吧。
    echo1937
        4
    echo1937  
       2023-02-21 09:07:38 +08:00 via iPhone
    选择 gjn
    king888
        5
    king888  
       2023-02-21 09:10:13 +08:00 via iPhone
    都没什么太大差别,那个顺手用那个
    DefoliationM
        6
    DefoliationM  
       2023-02-21 09:13:05 +08:00
    net/http
    daiv
        7
    daiv  
       2023-02-21 09:14:27 +08:00   ❤️ 2
    我用 goframe
    charmToby
        8
    charmToby  
       2023-02-21 09:14:44 +08:00
    go-zero 结合 iris 我公司就这样做的。
    to2false
        9
    to2false  
       2023-02-21 09:14:56 +08:00
    gin

    纯 api 的话非 rpc ,go-zero 不好用
    bv
        10
    bv  
       2023-02-21 09:15:36 +08:00
    https://github.com/xgfone/ship 比 gin 好用,就是名气不大
    fiypig
        11
    fiypig  
       2023-02-21 09:16:26 +08:00
    gin 然后需要什么搭什么,后面加入 RPC 也方便的
    NCE
        12
    NCE  
    OP
       2023-02-21 09:16:54 +08:00
    NCE
        13
    NCE  
    OP
       2023-02-21 09:17:31 +08:00
    @coderxy 后面 spring cloud 都上了,但前期类似先把 springboot 跑起来
    NCE
        14
    NCE  
    OP
       2023-02-21 09:18:59 +08:00
    @to2false
    @fiypig

    gin 和 go-zero 还不是一个层级的东西是吧? go-zero 和 iris 更偏后面 rpc ?
    xgxtt
        15
    xgxtt  
       2023-02-21 09:22:27 +08:00
    gin 上手快一点
    licoycn
        16
    licoycn  
       2023-02-21 09:22:48 +08:00
    gin+自己搭配即可
    feikeq
        17
    feikeq  
       2023-02-21 09:40:20 +08:00
    我觉得 iris 更灵活
    to2false
        18
    to2false  
       2023-02-21 09:41:17 +08:00
    @NCE #14 gin/iris 搞 http api ,虽然 go-zero 有 http api ,但那套用起来没那么简便
    to2false
        19
    to2false  
       2023-02-21 09:42:48 +08:00
    @to2false #18 发现 iris 更新了好多特性,但看选择吧
    rickiey
        20
    rickiey  
       2023-02-21 09:43:58 +08:00
    gin / echo
    wunonglin
        21
    wunonglin  
       2023-02-21 09:47:41 +08:00   ❤️ 2
    路由里最难用就是 gin 了。echo 是最推荐的
    richangfan
        22
    richangfan  
       2023-02-21 09:54:14 +08:00
    最快的是用 http 标准库,不依赖第三方
    josephxrays
        23
    josephxrays  
       2023-02-21 10:01:43 +08:00
    可以试试 b 站的 kratos ...
    qq976739120
        24
    qq976739120  
       2023-02-21 10:03:20 +08:00
    建议 gin+gorm , 不过..真的有必要节约服务器资源吗? 考虑到这一步的大项目还是要好好规划调研下.
    NCE
        25
    NCE  
    OP
       2023-02-21 10:13:42 +08:00
    @qq976739120 创业公司,锱铢必较
    to2false
        26
    to2false  
       2023-02-21 10:21:04 +08:00
    @NCE #25 创业公司哪个熟练用哪个,人力比起你这服务器贵多了
    vultr
        27
    vultr  
       2023-02-21 10:25:35 +08:00
    我推荐这个 https://github.com/webpkg/web

    理由是简洁到极点。

    简单 API 用法: https://github.com/webpkg/api
    zpfhbyx
        28
    zpfhbyx  
       2023-02-21 10:27:17 +08:00
    试试 fiber?
    securityCoding
        29
    securityCoding  
       2023-02-21 10:35:26 +08:00
    一直在等鹅厂内部的 trpc 开源,一个 pb 文件直接出 rpc 和 http ,还挺好用
    tbwisk
        30
    tbwisk  
       2023-02-21 10:39:31 +08:00
    自己用 gin 组装一下自己用到的,后续直接套用这个模板 然后填充业务代码..
    mcfog
        31
    mcfog  
       2023-02-21 10:48:59 +08:00
    keppelfei
        32
    keppelfei  
       2023-02-21 11:00:10 +08:00
    节约服务器资源就要换语言吗?这账可能越算越糊涂。
    huihuiHK
        33
    huihuiHK  
       2023-02-21 11:13:05 +08:00
    gin 好找工作,哈哈
    Nazz
        34
    Nazz  
       2023-02-21 11:14:02 +08:00
    @NCE go-zero 对标的是 kratos 这种微服务解决方案. iris 没用过只知道是基于 fasthttp 的, 比 gin 重一点但功能远不如 go-zero 那么丰富. 看你自己的需求, 没用到 gRPC 的话 gin 够用了.
    iwdmb
        35
    iwdmb  
       2023-02-21 11:15:45 +08:00
    Go 纯 API 框架推
    https://github.com/labstack/echo
    QPS 10000+ 的项目稳定运作
    相当稳定、可靠
    showshowcode
        36
    showshowcode  
       2023-02-21 11:47:17 +08:00
    是不是都没用过 fx
    hahasong
        37
    hahasong  
       2023-02-21 11:54:38 +08:00
    gin 最好用
    liuxu
        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
    son012
        39
    son012  
       2023-02-21 11:58:17 +08:00
    beego 没人推荐么?我最近学习 golang 就是用这个去做的一个公司功能小模块
    zoharSoul
        40
    zoharSoul  
       2023-02-21 12:00:56 +08:00
    go-zero
    ixixi
        41
    ixixi  
       2023-02-21 12:02:07 +08:00
    长期活跃+稳定的 api 很重要; 我投 gin
    xsen
        42
    xsen  
       2023-02-21 12:05:18 +08:00
    go-zero
    liuhan907
        43
    liuhan907  
       2023-02-21 12:23:13 +08:00
    创业公司,而且还是用过 Java 那一套的,还是纯 WebAPI 的业务,你就用 .NET 那也比 Go 来的更方便啊。。。
    jinzhe
        44
    jinzhe  
       2023-02-21 12:45:19 +08:00
    gofiber 路过
    Rainshaw
        45
    Rainshaw  
       2023-02-21 12:50:47 +08:00 via iPhone
    可以看看 hertz 和 kitex ,我最近在研究中,看文档感觉还可以
    patrickyoung
        46
    patrickyoung  
       2023-02-21 13:09:25 +08:00 via iPhone
    Gin 和 echo
    czyt
        47
    czyt  
       2023-02-21 13:15:32 +08:00
    kratos
    chendy
        48
    chendy  
       2023-02-21 13:19:10 +08:00
    java 农路过,表示服务器资源一般没有人力资源贵…
    RedisMasterNode
        49
    RedisMasterNode  
       2023-02-21 14:07:00 +08:00
    重新看了一眼楼主需求:
    本着节约服务器资源(省钱)的思想

    觉得这个不应该换 golang...
    caotian
        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 开发的程序资源消耗也非常小, 体验非常好。
    hopingtop
        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 了,就选择它吧,对于创业公司来说,性能和成本真的是很友好,唯一缺点就是有些城市不太好招人。
    Desdemor
        52
    Desdemor  
       2023-02-21 15:42:05 +08:00
    gin 简单,
    goframe 轮子组件多
    dayeye2006199
        53
    dayeye2006199  
       2023-02-21 16:13:48 +08:00 via Android
    推荐 echo ,简单,常用的功能开箱使用
    apkapb
        54
    apkapb  
       2023-02-21 16:17:32 +08:00
    自己基于 gin 封装一下,然后写一些 模板代码的生成器

    这样写起来非常棒 https://github.com/Xwudao/neter-template
    sunshengkai27
        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
    jinsongzhao
        56
    jinsongzhao  
       2023-02-21 17:50:43 +08:00
    @chendy 虽然服务器资源比人便宜,但是重构能力是瓶颈,面对一堆 java 写的屎山,首先得有个能让它脱胎换骨的人,新手可以利用语言优势,缩短于高手的差距。
    guanhui07
        57
    guanhui07  
       2023-02-21 19:08:00 +08:00
    建议 gin
    daiv
        58
    daiv  
       2023-02-21 19:43:41 +08:00
    我想要一个 纯 API 的, 会自动带 swagger ...
    daiv
        59
    daiv  
       2023-02-21 19:45:44 +08:00
    @liuxu #38 @jinzhe #44 fiber 无法加载 go-swagger
    fxjson
        60
    fxjson  
       2023-02-21 20:13:42 +08:00 via Android
    go zero 跟牛掰
    NCE
        61
    NCE  
    OP
       2023-02-21 20:19:12 +08:00
    @liuhan907 .net 搞了 10 来年,后来.NET 的红衣教主不再负责.net ,去负责 azure 后,我就带团队转 java 了。
    NCE
        62
    NCE  
    OP
       2023-02-21 20:25:34 +08:00
    @caotian 感谢! 我也是从 asp 开始一路走来的,路径一样。springboot 的内存问题我也是现在开始在乎,成本高了报价又不能高,一个 webjar 用 1g 已经很保守了。.net 从换负责人以后我就带团队全部转 java 了。后来 core 没再接触。现在就考虑 php 的性价比,看看 go 是不是可以,像你说的,可以服务器端资源节省下来。

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

    你说的 3 个容器,2 个 nginx:alpine 是部署前端站点当 cdn 吗?为什么部署 2 个呢?
    NCE
        63
    NCE  
    OP
       2023-02-21 20:26:41 +08:00
    @caotian 我从 asp,php,asp.net 1.0,2.0,4.0 ,到 java, 从 2003 年到现在 20 年了,哈哈哈,不想折腾了,止于 CRUD 安安稳稳做点可持续的业务吧。
    NCE
        64
    NCE  
    OP
       2023-02-21 20:28:22 +08:00
    @hopingtop 自己先折腾,2019 年辞职出来创业,3 年疫情已经只差最后一根稻草了,今年再扑腾扑腾。
    lrvy
        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/
    lesismal
        66
    lesismal  
       2023-02-21 21:35:20 +08:00
    只做 api 的话,可以试试我这个,可以用 websocket ,也可以用 http:
    https://github.com/lesismal/arpc/tree/master/examples/webchat
    lesismal
        67
    lesismal  
       2023-02-21 21:36:41 +08:00
    前端请求 api/rpc ,后端之间 rpc 都一套就能搞定搞定,自带了简单的 pub/sub 扩展,也方便
    realpg
        68
    realpg  
       2023-02-21 22:28:41 +08:00
    gin
    realpg
        69
    realpg  
       2023-02-21 22:30:36 +08:00
    @caotian
    `选择 go 的原因就是部署成本低, 语言简陋一点并不是大问题, 说 go 不能写业务的就更不知道为什么了, 有什么样复杂的业务 go 不能写的? asp 都开心地写过几年, go 比 asp 强多了, 而且忘掉架构, 忘掉设计模式, 用脚本一样的写法写 webapi, 做个快快乐乐的 curd boy, 早点下班带孩子, 不是很开心滴么。`

    说的太对了

    然后发现,忘掉架构, 忘掉设计模式,不带脑子的去写 golang crud ,性能起飞,服务器内存还 95%空闲
    hundandadi
        70
    hundandadi  
       2023-02-21 23:11:29 +08:00 via Android
    @chendy 公司降本增效的时候,就是用人力来节约服务器资源
    someonedeng
        71
    someonedeng  
       2023-02-21 23:39:45 +08:00
    gin / fiber

    轻装上阵 大多数场景都够用了
    isma123
        72
    isma123  
       2023-02-22 00:04:15 +08:00
    如果没有 rpc 需求,不建议用 go-zero
    lris 没接触过
    平时用 gin 比较多,gin 是真的好用
    liuhan907
        73
    liuhan907  
       2023-02-22 00:13:00 +08:00
    @NCE 这是前辈了啊。我现在做游戏带队用 Orleans+.NET 7+EFCore 7 。感觉真的挺舒服的,就是另一个老项目升不上来版本非常蛋疼。维护两套东西脑子经常转不过来。上上个项目我们用 Go 做的比赛匹配,但是团队成员反应都不太好。感觉写起来麻烦,后来调研之后就换现在的技术栈了。
    yrj
        74
    yrj  
       2023-02-22 05:24:58 +08:00
    gofiber + 1
    sunmoon1983
        75
    sunmoon1983  
       2023-02-22 09:00:54 +08:00
    我用 GoFrame
    wupher
        76
    wupher  
       2023-02-22 09:03:58 +08:00
    @caotian 握手

    我们也是差不多历程。 最早的项目 ThinkPHP ,简直就是屎山。 后来的项目 SpringBoot + Spring Cloud 上云后内存消耗太高,服务器资源高。给客户独立部署在报价上就没太多竞争力。
    macscsbf
        77
    macscsbf  
       2023-02-22 09:11:56 +08:00
    gin 依赖比较少,但是这样会导致集成其他功能时很多包要自己去搜索与尝试。如果你是希望有集成好的东西,我觉得 go-zero 可能会比较好吧。
    hoopan
        78
    hoopan  
       2023-02-22 09:26:50 +08:00
    用过 gin 还不错
    qW7bo2FbzbC0
        79
    qW7bo2FbzbC0  
       2023-02-22 09:42:41 +08:00
    @liuhan907 #73 Orleans 到底是什么作用,问一下,是微服务框架?
    qW7bo2FbzbC0
        80
    qW7bo2FbzbC0  
       2023-02-22 09:43:15 +08:00
    简单些的话,其实 net/http + 三方 mux 插件 + sqlx 手写 sql 就够了
    xqcode
        81
    xqcode  
       2023-02-22 09:45:31 +08:00
    gin
    caotian
        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 证书什么的更换也很方便。
    waltcow
        83
    waltcow  
       2023-02-22 09:55:32 +08:00
    go-zero 效率还可以, 支持 template 定制,不行也可以直接魔改 core 加 feature
    sparklee
        84
    sparklee  
       2023-02-22 10:33:28 +08:00
    从最基础的开始搞, 一切尽在掌握, 或者提前用完整的解决方案
    cookgo
        85
    cookgo  
       2023-02-22 10:33:29 +08:00
    guanzhangzhang
        86
    guanzhangzhang  
       2023-02-22 11:24:19 +08:00
    gin 没有整合 orm 啥的,很轻量,iris 作者篡改 git commit 记录,还干架,名声不好
    cnbattle
        87
    cnbattle  
       2023-02-22 11:26:41 +08:00
    在用 gin 和 go-zero, 推荐 gin, 简单好用,

    go-zero 有个坑,自动生成代码,无法接收 form data 二进制文件,有用户反馈这个问题,但作者没接受,
    个人理解 web 框架层该支持所有 http 标准,不该这样, 魔改可以实现,但工作流变了,有点难受 0.0
    liuxu
        88
    liuxu  
       2023-02-22 12:23:36 +08:00
    @daiv #59 直接使用 fiber 提供的 swagger 呢,https://github.com/gofiber/swagger
    xiaocaiji111
        89
    xiaocaiji111  
       2023-02-22 14:15:02 +08:00
    语言主要考虑的是生态,比如一些第三方服务,go 的 sdk 就没有,或者有 github 上一看个人作者很久没维护也不敢用。这个也算是个成本。
    daiv
        90
    daiv  
       2023-02-23 08:46:08 +08:00
    @cookgo #85 @sunmoon1983 #75 @Desdemor #52 有没有觉得 2.0 改得不好用了?
    NCE
        91
    NCE  
    OP
       2023-02-23 13:23:30 +08:00
    @liuhan907 可以看看这个 ORM: https://github.com/leadnt/fluentdao ,我之前维护的。
    NCE
        92
    NCE  
    OP
       2023-02-23 13:28:50 +08:00
    @caotian 我们之前给客户做了一个项目,用的 spring cloud ,上了 16 台服务器。。。服务器费用甲方出的,比项目开发费用本身都高。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2410 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 16:04 · PVG 00:04 · LAX 09:04 · JFK 12:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.