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

怒发一贴: go web 框架选哪个

  •  
  •   gaigechunfeng · 2020-06-11 10:55:56 +08:00 · 20709 次点击
    这是一个创建于 1387 天前的主题,其中的信息可能已经有所发展或是发生改变。

    并非伸手党,不为别的,纯粹引战~~

    目前我们的项目都是 springboot 一把梭,无奈太吃资源,4G 内存的服务器,跑不了几个项目。 当然主要是为了折腾,有心想尝试一下 go lang 的 web 框架玩一玩。

    随便搜了一下,发现 go 的框架太多了,大而全的,小而美的,国产的,进口的,太多了。这么好的选型素材不来 V 站水一贴,简直暴殄天物。

    我们的需求:中小型项目(做外包,接私活),要求上手快,出活块,然后该有的权限管理,jwt 都要有。尽量轻型吧,少占资源。

    好了,恳请大家推荐一下,我会用心比较。谢谢

    第 1 条附言  ·  2020-06-11 11:52:28 +08:00
    PS:
    我们的主要项目都是小程序,希望大家推荐的 go web 框架,有常熟的微信 token,code 认证的东西,或者很方面集成。
    第 2 条附言  ·  2020-06-11 11:57:05 +08:00
    还要求尽量少的去搭建环境,写架构设计的代码。

    因为面向钱编程,就只写业务 code 就行,上来就能写业务的那种。
    153 条回复    2020-07-10 15:56:11 +08:00
    1  2  
    NCZkevin
        1
    NCZkevin  
       2020-06-11 11:07:55 +08:00   ❤️ 1
    还是推荐 gin 吧,生态挺好的,很快就能上手
    pinktu
        2
    pinktu  
       2020-06-11 11:09:43 +08:00
    gin-vue-admin
    u823tg
        3
    u823tg  
       2020-06-11 11:10:42 +08:00   ❤️ 2
    gin 吧,java 的不适合中小项目。 或者你们可以换 dotnet core
    haoji
        4
    haoji  
       2020-06-11 11:11:35 +08:00
    gin
    raincode
        5
    raincode  
       2020-06-11 11:11:44 +08:00
    还招人不?
    huanleyan
        6
    huanleyan  
       2020-06-11 11:13:00 +08:00
    iris
    liaokylin2v
        7
    liaokylin2v  
       2020-06-11 11:14:11 +08:00 via Android
    beego 吧,gin 是优秀但是需要有人做很好的扩展,如果能力不强很容易用坏的
    Mohanson
        8
    Mohanson  
       2020-06-11 11:16:03 +08:00 via Android   ❤️ 1
    net/http 标准库
    gaigechunfeng
        9
    gaigechunfeng  
    OP
       2020-06-11 11:18:39 +08:00
    1-4 楼都推荐 gin,我几乎要确定要 gin 了。
    哈哈~
    gaigechunfeng
        10
    gaigechunfeng  
    OP
       2020-06-11 11:19:46 +08:00
    @raincode 我们也是兼职搞得。 几个公司同事一起。 目前还行,项目能应付的过来。 后面搞不赢,会考虑也找人帮忙做。
    gaigechunfeng
        11
    gaigechunfeng  
    OP
       2020-06-11 11:20:51 +08:00
    @pinktu 到位!老铁怎么知道我是 vue 的技术栈啊。 是不是有开源的库,我弄到本地,硬学一下。 :D
    qW7bo2FbzbC0
        12
    qW7bo2FbzbC0  
       2020-06-11 11:21:56 +08:00   ❤️ 2
    @u823tg @ gaigechunfeng 一开始我也找 go 的 web 框架,后来转向 dotnetcore,然后自己鼓捣了验证和 consul 注册两个小轮子,学习了 NPoco,总的来说,最起码 swagger 文档方面 spring 和 netcore mvc 吊打 python 和 go web 。而且 netcore 可以编译成单文件,和 go 一样到处部署,有一点就是对没有 root 权限的 cent6 部署不太友好,因为要额外的依赖包

    另外我觉得 web 不是 go 的最佳赛道
    gaigechunfeng
        13
    gaigechunfeng  
    OP
       2020-06-11 11:22:16 +08:00
    @u823tg gin 的发展稳定不? 学期曲线如何。
    Vegetable
        14
    Vegetable  
       2020-06-11 11:23:02 +08:00   ❤️ 1
    go 的框架多吗?能打的就两个,gin/beego,前者对标 flask,后者对标 Django/Spring Boot
    比起 Java 早已被统一的情形是多一些,实际上真的很好选。

    Beego 的好处是和 Java 体系的模型更像一点,可以看一看
    gaigechunfeng
        15
    gaigechunfeng  
    OP
       2020-06-11 11:26:15 +08:00
    @hjahgdthab750 这有点超纲。其实我们团队用过 spring 和 flask 的。 flask 之前是学习用的,项目只是跑起来,还没商用。后来的项目都是 spring 了。 但就是资源消耗太多,而且看到网上经常 go 和 java 对比,所以才考虑尝试一下 go 。
    janxin
        16
    janxin  
       2020-06-11 11:26:28 +08:00   ❤️ 3
    Go 都比较轻量,轻量到简陋。国内外包出活可以考虑 GoFrame,把常用的都塞进去了,臃肿是真的胖,反正外包嘛,维护不是什么重点,出活需要快
    wysnylc
        17
    wysnylc  
       2020-06-11 11:28:39 +08:00
    spring boot 4g 完全够用何况你们还不是多大的项目,建议多查查怎么优化
    pwli
        18
    pwli  
       2020-06-11 11:28:58 +08:00
    @hjahgdthab750 fastapi 不服
    fiypig
        19
    fiypig  
       2020-06-11 11:29:13 +08:00
    如果是外包的话,那我只推荐 beego 了 , 你们可以根据框架 ,整个框出来 ,中间件什么的, 到时候套一下就行 .
    但是我不喜欢 beego 就是 ,我还是习惯用 gin...
    gaigechunfeng
        20
    gaigechunfeng  
    OP
       2020-06-11 11:29:31 +08:00
    @Vegetable 兄弟这么一说我理解了。gin 就是小,轻,自由度高,beego 就是大而全。 我们从 sb 转过来,可能 beegon 上手会快点。 另外多问一句,服务跑起来,beego 的资源消耗会不会比 gin 大很多。

    现在倾向于 beego 了,哈哈
    loading
        21
    loading  
       2020-06-11 11:30:39 +08:00 via Android   ❤️ 2
    gin
    goframe
    二选一,一个轻,一个重。goframe 是国人产品。
    gaigechunfeng
        22
    gaigechunfeng  
    OP
       2020-06-11 11:32:08 +08:00
    @wysnylc 4G 是跑一个项目是够,跑多个估计有点顶不住。 甲方都要我们做成 saas 的架构了,就是为了节省资源。性能优化,调优目前不是我们的主要目标,也没有时间沉下来去仔细研究这些。惭愧,见笑了,兄弟
    dodo2012
        23
    dodo2012  
       2020-06-11 11:33:08 +08:00   ❤️ 1
    gin,go 的不要选重框架,
    gaigechunfeng
        24
    gaigechunfeng  
    OP
       2020-06-11 11:33:24 +08:00
    @loading gin 轻型大家都已经公认了。 楼上有兄弟说 beego 。
    不知道 beego 和 goframe 的区别。

    这么看驻留的 go 框架就好几个了。
    huiyifyj
        25
    huiyifyj  
       2020-06-11 11:38:45 +08:00
    gin, iris, echo...
    推荐这 3 个
    qW7bo2FbzbC0
        26
    qW7bo2FbzbC0  
       2020-06-11 11:44:16 +08:00
    @pwli 这个我也调研过,部署略麻烦。我追求的是不需要 super user,不需要额外管护,直接启动的方式。与其使用 fastapi,我反而会回退到 bottle.py 上,毕竟小项目接口没太多,直接手写 swagger 就行
    qW7bo2FbzbC0
        27
    qW7bo2FbzbC0  
       2020-06-11 11:45:57 +08:00
    @gaigechunfeng flask 还行吧,插件加多了就成了 django 了,但是会比 django 看起来还不规范。。。
    dog82
        28
    dog82  
       2020-06-11 11:49:58 +08:00
    gin beego 二选一,抛硬币决定吧
    gaigechunfeng
        29
    gaigechunfeng  
    OP
       2020-06-11 11:53:36 +08:00
    @dog82 哈哈,玄学决定了。 这两个项目对微信后台认证,支付那一套应该都有成熟的支持吧。我们主要做 wx 小程序。
    u823tg
        30
    u823tg  
       2020-06-11 11:57:43 +08:00
    @hjahgdthab750 #12 用 docker 吧,dotnet core 对 docker 支持的挺好
    ahsjs
        31
    ahsjs  
       2020-06-11 11:59:15 +08:00
    gin
    konakona
        32
    konakona  
       2020-06-11 11:59:26 +08:00
    其实 Go 的 Web 框架是真的 Web 框架,类似 Orm 这些还是会用其他包来解决。比如 Go 用的 Gorm 也是一朵「传奇」,问题还挺多的。

    Web 框架主要是解决了路由、方法封装、表单处理的一些指向性的标准,仍然需要具备一定的 Golang 语言能力,比如类型处理等等,还是 Golang 的老本行。

    上手速度来看,Beego 绝对是最快的,等于换了个语言,还是沿用原来的开发思路。

    Gin 的话,稍微理解下也是不错的。

    我目前用的 Gin 。
    Hanggi
        33
    Hanggi  
       2020-06-11 12:00:07 +08:00
    Go 只有两个框架 Gin 和 Echo 。别的可以忽略。
    metrue
        34
    metrue  
       2020-06-11 12:00:19 +08:00 via iPhone
    Gin 即可.
    stach
        35
    stach  
       2020-06-11 12:00:36 +08:00   ❤️ 10
    go 不适合做 web
    agee
        36
    agee  
       2020-06-11 12:00:45 +08:00 via iPhone
    去看一眼 beego 的项目吧你就放弃的,还是 gin,echo
    konakona
        37
    konakona  
       2020-06-11 12:01:12 +08:00   ❤️ 1
    @gaigechunfeng 这种微信开发的需求,在 Go 领域里,完全不需要考虑“程序用什么 Web 框架”,因为都是第三方的包…… 都能用呀。

    比如 beengo 里可以用 gin 的一些包。而 gin 也会用 beengo 里的一些包。就是这么随意。
    konakona
        38
    konakona  
       2020-06-11 12:01:49 +08:00
    @stach 适合啊,你理解的 web 不会是混编吧?
    pinktu
        39
    pinktu  
       2020-06-11 12:04:47 +08:00
    @gaigechunfeng 你去 GitHub 搜索就有了,很好的一个框架
    windfarer
        40
    windfarer  
       2020-06-11 12:05:55 +08:00
    go 不适合做外包
    to2false
        41
    to2false  
       2020-06-11 12:06:35 +08:00
    这需求描述,没必要用 go 啊,我觉得 php 就很合适,短平快
    pinktu
        42
    pinktu  
       2020-06-11 12:07:11 +08:00   ❤️ 1
    @gaigechunfeng 你需要的应该是一个半成品项目二次开发,他们推荐都是框架
    JB18CM
        43
    JB18CM  
       2020-06-11 12:13:19 +08:00
    go 不适合开发
    leedong00
        44
    leedong00  
       2020-06-11 12:18:57 +08:00
    php 符合你
    tlday
        45
    tlday  
       2020-06-11 12:28:21 +08:00
    以前我也喜欢小而美的框架,后面发现一大堆必须的插件都已经很少更新或者不更新导致跟最新的框架主版本不兼容也没有好的替代品,整个项目的插件兼容性和版本一团浆糊,经常需要改插件源码以后,我就倒向大而全了。点名 flask 和 webpack 。
    monospace
        46
    monospace  
       2020-06-11 12:29:49 +08:00   ❤️ 5
    朋友,PHP 考虑下不。。。
    tlday
        47
    tlday  
       2020-06-11 12:30:20 +08:00
    还有 sinatra
    labulaka521
        48
    labulaka521  
       2020-06-11 12:35:58 +08:00 via iPhone
    beefo 基本不维护了
    Hellert
        49
    Hellert  
       2020-06-11 12:36:57 +08:00
    以前用 echo, 现在直接用 net/http 标准库
    xsephiroth
        50
    xsephiroth  
       2020-06-11 12:39:08 +08:00 via iPhone
    Echo

    以前用 gin 的路由太不爽了
    ccog
        51
    ccog  
       2020-06-11 12:43:03 +08:00
    php 考虑下
    qloog
        52
    qloog  
       2020-06-11 12:47:28 +08:00
    首推 gin,其次 echo, 用 gin 主要是很多公司在用,大厂小厂都有用,碰到问题好解决,但是用 gin 也需要自己撸很多东西,想快速上手可以看看这个,可以直接拿来开发了,[snake]( https://github.com/1024casts/snake)
    gaigechunfeng
        53
    gaigechunfeng  
    OP
       2020-06-11 12:47:45 +08:00
    @monospace 兄弟,我对 php 有误解。 我还是到别的摊位看看 {笑哭}
    gaigechunfeng
        54
    gaigechunfeng  
    OP
       2020-06-11 12:49:03 +08:00
    @pinktu 嗯嗯,对的。最好有开源的项目,mall,或者 admin 这种。 适合二开的,直接拿过来硬撸的。
    lixuda
        55
    lixuda  
       2020-06-11 12:49:17 +08:00
    @gaigechunfeng flask 不行吗?
    sunxiansong
        56
    sunxiansong  
       2020-06-11 12:54:28 +08:00
    echo 和 gin 中选了 echo

    - 代码似乎更紧凑一点,看上去比较简单,比较好上手研究
    - echo 的统一错误处理机制更方便
    - echo 的 release 节奏比 gin 更频繁一点

    -gin 的中间件更丰富一点,不过要加其他依赖,echo 自带了一些中间件
    gaigechunfeng
        57
    gaigechunfeng  
    OP
       2020-06-11 12:54:28 +08:00
    @lixuda 之前我们用 jquery 的时候,用的 flask,也没有感觉什么不行。但后面基于一个 spring boot 的开源项目做的二开,就转到 sb 了。 sb 确实比 flask 省事很多。 反正我们主要是看二开的项目{笑哭}
    mengyx
        58
    mengyx  
       2020-06-11 13:03:25 +08:00 via Android
    我一开始用 gin,后来换了 echo,用的舒服。
    确实,go 的话好像没有大框架的习惯,要什么功能引入相应的包就好了。
    natforum
        59
    natforum  
       2020-06-11 13:04:54 +08:00
    gin, iris 二选一
    cz5424
        60
    cz5424  
       2020-06-11 13:06:31 +08:00 via iPhone
    Go 不适合做 web 是什么梗,看团队成员技能点选语言最重要,web 框架都是轮子。flask 做小程序,没啥不好的。你说得那些附带的都不是 web 框架提供的,都是第三方包。
    joesonw
        61
    joesonw  
       2020-06-11 13:07:02 +08:00
    没人推 macaron 吗? 一般的业务对于框架性能来说其实是不挑剔的. macaron 注入的易用性还是很棒的.
    sagaxu
        62
    sagaxu  
       2020-06-11 13:08:31 +08:00 via Android   ❤️ 3
    Java 换 Go 省不了多少内存,原来能跑 1 个的换 Go 能跑 2 个,多付出的人工成本,能买很多内存
    Hanggi
        63
    Hanggi  
       2020-06-11 13:09:41 +08:00
    选框架看 stars 说话,国内项目根据情况打折扣。比如:
    beego 的星星数:stars/3 就好了,
    Vue 的星星数:stars/5 就比较合理了。
    yincrow
        64
    yincrow  
       2020-06-11 13:09:56 +08:00   ❤️ 1
    等你一个月后来发贴,标题为你想好了:用 Go 做业务开发太痛苦了,不要用 go 写 web
    prenwang
        65
    prenwang  
       2020-06-11 13:36:29 +08:00   ❤️ 1
    go 有没有类似 mybatis 的模块
    yahon
        66
    yahon  
       2020-06-11 13:40:03 +08:00
    django + DRF 不是外包首选吗
    gaigechunfeng
        67
    gaigechunfeng  
    OP
       2020-06-11 13:45:42 +08:00
    @prenwang 对,这个我也想问。目前用的就是 mybatis
    johng
        68
    johng  
       2020-06-11 13:47:19 +08:00
    @gaigechunfeng 如果称得上框架的话,推荐 GoFrame: https://goframe.org ,可以将她类似于 PHP 中的 Laravel,Java 中的 SpringBoot 或者 Python 中的 Django 。GoFrame 框架虽然开源时间较晚,不过发展比较快,口碑不错。
    gaigechunfeng
        69
    gaigechunfeng  
    OP
       2020-06-11 13:48:07 +08:00
    @sagaxu 兄弟你要这么说,那我就不困了啊。其实 spring 真的已经是出活很快的了。 要是升不了这么多内存,我发帖意义何在。。。
    gaigechunfeng
        70
    gaigechunfeng  
    OP
       2020-06-11 13:49:22 +08:00
    @yincrow 哈哈,不过很有可能我会发帖:go 选型没通过,还是继续 spring boot 撸了
    wzw
        71
    wzw  
       2020-06-11 13:50:10 +08:00
    我在用 GoFrame, 挺好,非常好。
    JasperYanky
        72
    JasperYanky  
       2020-06-11 13:56:07 +08:00   ❤️ 1
    外包 django 一梭子,感觉学一次能写 10 年
    chinvo
        73
    chinvo  
       2020-06-11 14:01:23 +08:00 via iPhone   ❤️ 1
    如果之后不打算用 go 了建议看看 .net core,比 Java 高到不知道哪里去了
    gaigechunfeng
        74
    gaigechunfeng  
    OP
       2020-06-11 14:03:58 +08:00
    @JasperYanky 老铁不早说,我们团队,误入了 spring boot 的坑。Django 运行起来,吃资源吗?
    gaigechunfeng
        75
    gaigechunfeng  
    OP
       2020-06-11 14:04:49 +08:00
    @chinvo 真的吗?兄弟说这么诚恳,我现在就去了解一下。 容易上手吗
    airplayxcom
        76
    airplayxcom  
       2020-06-11 14:06:25 +08:00   ❤️ 1
    上手快,出活块? php 不香吗?
    mosesyou
        77
    mosesyou  
       2020-06-11 14:08:35 +08:00
    java 转 go 的可以选 beego,我们之前用过,然后加上 go-kit 的 consul 服务注册发现之类的功能就差不多了
    OMGZui
        78
    OMGZui  
       2020-06-11 14:08:36 +08:00
    (做外包,接私活) php 多香啊
    JasperYanky
        79
    JasperYanky  
       2020-06-11 14:08:47 +08:00
    @gaigechunfeng 公司目前在用 go java 和 python django ,如果只是纯外包或者小项目,django 应该是最适合的
    gaigechunfeng
        80
    gaigechunfeng  
    OP
       2020-06-11 14:09:08 +08:00
    @chinvo 朋友介意留个 wx 吗?我加你交流一下这个.net
    gaigechunfeng
        81
    gaigechunfeng  
    OP
       2020-06-11 14:09:56 +08:00
    @hjahgdthab750 朋友介意留个 wx 吗? 交流一下,搞不好我要学习.net core 了 :D
    chinvo
        82
    chinvo  
       2020-06-11 14:10:05 +08:00 via iPhone   ❤️ 1
    @gaigechunfeng #74

    同样的 MVC hello world, .net 占资源比 Java 少太多。

    至于执行效率、响应速度等问题,很多公开的 benchmark 都有做对比。

    LinQ 和 官方 ORM 框架 EF 用起来很爽,能覆盖大部分业务逻辑对数据操作的需求。

    生态方面也不差,nuget 上的活跃包很多,前些年还需要偶尔造轮子,这两年基本上各种需求都能找到可用的包了。
    gaigechunfeng
        83
    gaigechunfeng  
    OP
       2020-06-11 14:29:57 +08:00
    @airplayxcom 我顶,难道比 spring 还快?
    kaminono
        84
    kaminono  
       2020-06-11 14:37:12 +08:00
    我学的 iris,GO 做 MVC 还是太费劲了
    missdeer
        85
    missdeer  
       2020-06-11 14:37:29 +08:00
    轻一点的 gin,重一点的 beego
    问题是前不久我看到一个评测说 gin 的性能还不如 beego,有点反直觉
    chinvo
        86
    chinvo  
       2020-06-11 14:38:07 +08:00   ❤️ 1
    @gaigechunfeng #82 PHP 确实出活快

    生态也不错, 各种国内平台解决方案、SDK

    二开和维护弄到怀疑人生
    airplayxcom
        87
    airplayxcom  
       2020-06-11 14:41:34 +08:00
    @gaigechunfeng 复制粘贴一把梭 你说快不快
    dhssingle
        88
    dhssingle  
       2020-06-11 14:46:02 +08:00   ❤️ 1
    Asp.Net Core + ABP VNext 开发效率杠杠的。
    性能也比 Go 、Java 那几个常用框架强很多。
    https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=composite
    ![techempower]( https://i.loli.net/2020/06/10/jZU8PBNTRLw31x7.png)
    lasuar
        89
    lasuar  
       2020-06-11 14:46:04 +08:00
    iris 、gin √
    beego ×
    lasuar
        90
    lasuar  
       2020-06-11 14:56:06 +08:00
    说下我个人选择一个 web 框架重点参考的几个因素:
    - issues opened
    - features
    - documents
    - start-cases
    - stars
    基于以上因素,个人认为 gin 稍弱于 iris 。
    zorui
        91
    zorui  
       2020-06-11 14:56:57 +08:00
    何不 继续 Java vert.x Quarkus 资源都比较少。
    fengerzh
        92
    fengerzh  
       2020-06-11 15:03:07 +08:00
    iris 简单到连路由都不用写,直接 PostSomeroute 就可以用 /someroute 访问了
    fenglangjuxu
        93
    fenglangjuxu  
       2020-06-11 15:12:43 +08:00
    gin-vue-admin 应该比较适合你 但是这个偏 admin
    my3157
        94
    my3157  
       2020-06-11 16:06:29 +08:00
    自己用 martini 魔改的框架, 很多业务相关的都用中间件实现了, 复用率很高, 如果不是特别 care 性能, martini 或者基于 martini 魔改的 macaron 都可以
    liuxey
        95
    liuxey  
       2020-06-11 16:07:46 +08:00
    如果单纯的因为内存问题,我也建议不要换 Springboot 一把梭下去,付出的时间成本和人员成本 可以买一堆内存条了
    my3157
        96
    my3157  
       2020-06-11 16:09:24 +08:00
    比如修改用户邮箱的代码是这样的

    ```
    m.Patch("/user/email", user.CheckEmail, user.CheckToken, user.EmailNotExist, user.Detail, user.UpdateEmail)
    ```
    gxm44
        97
    gxm44  
       2020-06-11 16:16:52 +08:00
    echo + 1
    qiubaowei
        98
    qiubaowei  
       2020-06-11 16:30:05 +08:00
    node 行吗
    ningyu1
        99
    ningyu1  
       2020-06-11 16:49:52 +08:00
    强烈推荐 gin,自由度好、社区完善
    Hanggi
        100
    Hanggi  
       2020-06-11 17:52:19 +08:00 via iPhone
    感觉 go 语言是一个遇强则强,遇弱则弱的语言。
    强的可以一 go 到底,弱的就连业余都写不了。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5249 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 09:16 · PVG 17:16 · LAX 02:16 · JFK 05:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.