V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
ThinkStu
V2EX  ›  Go 编程语言

2023 年了, GoWeb 应该选择 Goframe、Gin、Beego、Iris 哪一项?

  •  
  •   ThinkStu · 2023-04-06 21:50:04 +08:00 · 10843 次点击
    这是一个创建于 385 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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   ❤️ 1
    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 谢谢前辈指导。又让我开阔了眼界...
    wunonglin
        6
    wunonglin  
       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  
       2023-04-07 04:33:08 +08:00
    选择 Gin,当然选择一个 简单的,然后明白了原理,其实就那些玩意儿,选择一个第三方库最多的. 社区活跃的.
    qfdk
        13
    qfdk  
       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 比较好
    zpfhbyx
        27
    zpfhbyx  
       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
    vipiscaptain
        35
    vipiscaptain  
       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  
       362 天前
    go-zero
    gddg
        57
    gddg  
       356 天前
    @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  
       314 天前
    @Hathaway 老哥 go fibber 怎么断点啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2784 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 15:38 · PVG 23:38 · LAX 08:38 · JFK 11:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.