V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
henryisme
V2EX  ›  程序员

2022 年了,目前的 go web 框架 Gin Beego Iris 如何选择?

  •  
  •   henryisme · 2022-04-20 17:34:53 +08:00 · 10233 次点击
    这是一个创建于 981 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Gin ?
    Beego ?
    Iris ?

    各位 V 友说下使用的心得呀!
    69 条回复    2022-11-17 09:45:19 +08:00
    Oktfolio
        1
    Oktfolio  
       2022-04-20 17:37:47 +08:00
    用 :param 作为路径参数的我不选。对,说的就是 gin
    bootvue
        2
    bootvue  
       2022-04-20 17:40:52 +08:00
    gin
    eurry
        3
    eurry  
       2022-04-20 18:16:13 +08:00
    个人更倾向 Iris ,但 Gin 用的人多
    plutome
        4
    plutome  
       2022-04-20 18:19:36 +08:00   ❤️ 4
    Gin ,Iris 都用过,各有优劣吧。

    Beego 这玩意,真的不好说什么。
    个人而言,是跟 CSDN 并列在一起的东西。
    henryisme
        5
    henryisme  
    OP
       2022-04-20 18:26:39 +08:00
    gin 貌似简单性能好些
    SenLief
        6
    SenLief  
       2022-04-20 18:26:51 +08:00
    ehco 也挺好用的啊
    beixiao
        7
    beixiao  
       2022-04-20 18:51:39 +08:00 via iPhone
    go-zero
    jonathanchoo
        8
    jonathanchoo  
       2022-04-20 19:07:35 +08:00
    Beego ?狗都不用
    gowk
        9
    gowk  
       2022-04-20 19:11:23 +08:00
    fiber? goframe?
    Akashic
        10
    Akashic  
       2022-04-20 19:11:24 +08:00
    用过 iris gin ,个人建议 gin ,go [官方教程]( https://go.dev/doc/tutorial/web-service-gin ) 也是用的 gin 为例子,有点钦定的感觉
    gogogo1203
        11
    gogogo1203  
       2022-04-20 19:29:41 +08:00
    个人用过 gorilla , httptreemux. 没有什么大的区别。。。。。。
    wzw
        12
    wzw  
       2022-04-20 19:45:53 +08:00 via iPhone
    我用 goframe ,有没有相同的
    bjfane
        13
    bjfane  
       2022-04-20 20:55:37 +08:00
    为什么 beego 这么差,我 2014 年的时候用过 beego ,是说 beego 没更新 还是说 beego 太重了?
    wunonglin
        14
    wunonglin  
       2022-04-20 21:24:35 +08:00
    go echo 。gin 不好用
    loveuer
        15
    loveuer  
       2022-04-20 21:29:40 +08:00
    fiber 不错, 就是 fasthttp 资源复用的问题要多注意
    Mitt
        16
    Mitt  
       2022-04-20 21:36:06 +08:00
    推荐 echo ,其实感觉不是很理解看中 gin 什么
    Hanggi
        17
    Hanggi  
       2022-04-20 21:36:58 +08:00   ❤️ 6
    觉得 Gin 的路由不好用的,推荐一种解决方法,很多大厂也在用。

    就是需要进入 wildcard 时添加一个 URL 安全的符号。

    类似:
    /v1/articles/+/:id
    这样就不会跟下面的有冲突。
    /v1/articles/foo

    也可以使用其他一些符号
    /v1/articles/-/:id

    具体怎么用可以自行规划,比如 + 号就接 id ,或者其他规则。
    panlatent
        18
    panlatent  
       2022-04-20 22:02:05 +08:00
    推荐 echo 吧
    panlatent
        19
    panlatent  
       2022-04-20 22:05:57 +08:00
    刚入门 go 的时候想用一些库构建一个全栈框架来着,没成,但除了一些全栈框架 gin iris echo 还有些其他的都试了一个遍,只有 echo 是让我感觉最舒服且最终选用的。
    drackzy
        20
    drackzy  
       2022-04-20 22:12:19 +08:00
    Beego 不怎么维护。
    GTim
        21
    GTim  
       2022-04-20 22:12:27 +08:00
    @Hanggi 的确,大部分其实就是一个 id 的事情,其它参数能放在 query 的绝对不放在 path 里
    biubiuF
        22
    biubiuF  
       2022-04-20 22:28:55 +08:00
    各种框架都差不多的,其实.
    roundgis
        23
    roundgis  
       2022-04-20 22:35:31 +08:00 via Android
    @wzw 握手
    fyibmsd
        24
    fyibmsd  
       2022-04-20 22:36:06 +08:00
    beego 狗都不用
    airplayxcom
        25
    airplayxcom  
       2022-04-20 23:03:13 +08:00 via iPhone
    beego 一个函数名称都能产生歧义,比如 GetString ,也能接收 post 请求,哈哈😄,反正我是不想这么懒的写法。
    1more
        26
    1more  
       2022-04-20 23:07:28 +08:00
    gin 吧,中规中矩
    iwdmb
        27
    iwdmb  
       2022-04-21 00:08:56 +08:00
    echo
    Gin 的路由不好用
    iwdmb
        28
    iwdmb  
       2022-04-21 00:09:26 +08:00
    @Hanggi echo 的 router 完美解決這個問題
    helone
        29
    helone  
       2022-04-21 00:16:44 +08:00
    fiber
    add1commit
        30
    add1commit  
       2022-04-21 00:19:43 +08:00 via iPhone
    插眼关注一下这个帖子
    qq1340691923
        31
    qq1340691923  
       2022-04-21 01:15:09 +08:00 via Android
    fiber
    Trim21
        32
    Trim21  
       2022-04-21 01:21:32 +08:00 via Android
    在用 fiber
    musi
        33
    musi  
       2022-04-21 07:50:40 +08:00 via iPhone
    echo
    cctv1005s927
        34
    cctv1005s927  
       2022-04-21 07:56:44 +08:00
    echo
    RedisMasterNode
        35
    RedisMasterNode  
       2022-04-21 09:24:14 +08:00
    @Mitt 感觉是自定义和扩展的能力吧,gin 本身提供的 feature 不是很多,它不是 django 那种大包大揽全集成的框架,更像 flask 很多东西都得自己开发。用 go 的大公司居多,有独立开发脚手架、扩展插件,或者对整个框架二次开发的能力,所以选用 gin 的挺多的
    charmToby
        36
    charmToby  
       2022-04-21 09:27:04 +08:00
    自己用过 gin iris ,公司项目用的 iris ,感觉区别不是很大。
    gsanidt
        37
    gsanidt  
       2022-04-21 10:03:38 +08:00
    gin ,go-zero
    LoNeFong
        38
    LoNeFong  
       2022-04-21 10:10:38 +08:00
    用:param 作为路径参数的我觉得挺好 对 我说的就是 gin
    ikaros
        39
    ikaros  
       2022-04-21 10:20:29 +08:00
    纯 json/rpc api 推荐 gokit

    非前后端分离推荐 echo/gin
    fengjianxinghun
        40
    fengjianxinghun  
       2022-04-21 10:46:16 +08:00
    @Hanggi 原来如此,我用 gin 就被这个苦恼了一阵
    bigbigpark
        41
    bigbigpark  
       2022-04-21 11:38:30 +08:00
    goframe 路过
    Hellert
        42
    Hellert  
       2022-04-21 11:40:12 +08:00 via Android
    net/http 的路过
    haha512
        43
    haha512  
       2022-04-21 11:49:15 +08:00
    无论任何语言,鄙视国内开发者开发的框架,好像都成了政治正确,其他能把一个框架开发到那个程度,都是高手了,而鄙视的,多数都是出于无知或优越感爆棚
    FightPig
        44
    FightPig  
       2022-04-21 11:52:35 +08:00
    别用 Beego 就行,这玩意儿有个 bug 几年前提的到现在还在,也没人管过,我也是服的
    iwdmb
        45
    iwdmb  
       2022-04-21 12:06:20 +08:00
    @RedisMasterNode
    你講的這些 Gin 的優點 Echo 一樣有
    更何況 Echo 還是基於 net/http
    認真講 Gin 單純只是營銷厲害而已
    Echo 光 Router 的便利性就贏 Gin 十條街

    前公司 labstack/echo 用在每秒數千 TPS 的服務完全沒問題
    iwdmb
        46
    iwdmb  
       2022-04-21 12:08:42 +08:00
    寫 API 業務用 Gin 的 Router 真的自找麻煩
    性能也沒有真的很顯著的優勢
    securityCoding
        47
    securityCoding  
       2022-04-21 12:09:40 +08:00 via Android
    @haha512 很多人喜欢装逼你懂的。轮子数不胜数,有缺点说缺点,带情绪输出的都是菜鸡
    sb137885
        48
    sb137885  
       2022-04-21 13:30:26 +08:00
    Beego ?狗都不用
    liuxu
        49
    liuxu  
       2022-04-21 13:54:50 +08:00
    gin 和 fiber
    snowlyg
        50
    snowlyg  
       2022-04-21 14:08:53 +08:00
    听领导的
    g1eny0ung
        51
    g1eny0ung  
       2022-04-21 14:15:01 +08:00   ❤️ 7
    如果你看重稳定且灵活的 Router ,那么不推荐用 Gin 。Gin 过去一直使用了 httprouter ,但是为了追求性能它的 prefix tree 结构只支持 explicit matches 。曾经 https://github.com/julienschmidt/httprouter/pull/329 这个 PR 尝试过加入 mixed params 来改善这个问题。虽然 httprouter 没有合并这个 PR 但是这个改动被 Gin 合进去了。但是这种在不合适的结构中强行 patch 的改善出现了很多 bug ,我曾经也提过 PR: https://github.com/gin-gonic/gin/pull/2706 去修复我遇到的问题。

    但是关键的是 Gin 的 maintainers 基本不再参与开发了,你未来可能会遇到很多问题需要自己解决。就我个人的贡献经历来看,他们会期望你去解决问题,自己却不太想深入问题的所在。

    这点在最近的 commits 中都有体现,可以对比一下 Gin 和 Echo 的提交,你会发现 Echo 相比之下活跃的多得多。

    而且从我的使用来看,我交 PR 的时候也做过 benchmark ,Gin 主推的性能并没有他们所说的那么好,没有那么好是因为其他的框架也没有那么差。所以除了这点以外,Gin 其实没有什么 features 可以值得留恋的了。

    我也用过 Echo ,各方面都很不错,可以说是一个标准的现代后端框架了。所以我推荐 Echo ,Gin 现在可以说是从各方面都远远落后了。
    keepeye
        52
    keepeye  
       2022-04-21 14:19:21 +08:00
    我用的 iris.. 用习惯了 组件比较多
    RedisMasterNode
        53
    RedisMasterNode  
       2022-04-21 15:13:03 +08:00
    @iwdmb 下次可以试试。不过说什么营销厉害的,感觉不太赞同,讲这些没有意思,工具或者团队是需要有合适的人来运营,这不是比较的理由,你只需要强调出你推荐的工具的优点就足够了
    concernedz
        54
    concernedz  
       2022-04-21 15:34:12 +08:00
    强推 goframe 和 go-zero
    chenhaifeng
        55
    chenhaifeng  
       2022-04-21 15:47:45 +08:00
    目前正式项目微服务使用 go-zero ,单体用 fiber ,简单好用。
    fsdfds
        56
    fsdfds  
       2022-04-21 16:00:03 +08:00
    无脑 goframe
    bzj
        57
    bzj  
       2022-04-21 16:38:30 +08:00
    @airplayxcom 又菜又爱说
    captain2011
        58
    captain2011  
       2022-04-21 16:41:11 +08:00
    老手就 gin 吧,新手 begoo 比较友好店,gin 感觉官方再推
    ksco
        59
    ksco  
       2022-04-21 17:40:30 +08:00
    https://github.com/beego/beego/blob/develop/client/orm/db.go#L1068-L1108

    看看这个 12 层的嵌套,就不说好不好用了,你敢用吗?
    LcDraven
        60
    LcDraven  
       2022-04-21 17:42:34 +08:00
    我刚用 gin 重构完 python 的 flask
    blackbeans
        61
    blackbeans  
       2022-04-21 18:13:40 +08:00
    我也推荐 echo,写起来极为顺手,而且很简洁。
    haolongsun
        62
    haolongsun  
       2022-04-21 18:56:08 +08:00
    @ksco 典中典,有点地狱回调那味道了。
    SorcererXW
        63
    SorcererXW  
       2022-04-21 19:42:34 +08:00
    还是 Echo 最好用
    lesismal
        64
    lesismal  
       2022-04-21 21:35:38 +08:00
    可以试试我这个,rpc 框架一把梭,request 、推送、广播,随便弄:

    websocket:
    github.com/lesismal/arpc/tree/master/examples/webchat

    websocket+http:
    github.com/lesismal/arpc/tree/master/examples/httprpc
    lesismal
        65
    lesismal  
       2022-04-21 21:41:10 +08:00
    @haha512 #43 也不全是因为政治正确,因为确实很多国人项目 KPI 导向、污染了环境,也不能全怪国人作者,因为一些厂就有这些 KPI 指标,跟内卷是一个道理,都是资本家逼的

    @securityCoding #47 有一些知名的项目臭大街的程度也比较高、已经有无数人喷过了,所以也并不都是装逼而喷,得就事论事
    lesismal
        66
    lesismal  
       2022-04-21 21:45:59 +08:00   ❤️ 1
    有一些号称微服务的框架挺火的,但其实微服务哪有什么框架,就是一些基础组件稍微封装下罢了,很多基础组件又是封装下别人的库、自己另外起个名字、然后就号称自己实现了一套 xxx 了

    这些项目都是脚手架类型,更大程度上是一种工程模板,称作框架都有点高抬了
    xsen
        67
    xsen  
       2022-04-22 13:11:41 +08:00
    go-zero+1
    airplayxcom
        68
    airplayxcom  
       2022-04-22 21:02:36 +08:00 via iPhone
    @bzj 啊对对对
    helloworld1024
        69
    helloworld1024  
       2022-11-17 09:45:19 +08:00
    @eurry +1. 我也喜欢用 iris ,特别是喜欢 iris 的 mvc 功能。gin 我也用,但是 gin 要写一堆的路由,很是费劲,而且不好维护。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1164 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 18:37 · PVG 02:37 · LAX 10:37 · JFK 13:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.