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

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

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

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

    目前我们的项目都是 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  
    brucewuio
        101
    brucewuio  
       2020-06-11 17:57:20 +08:00
    4GB 都不够? 很怀疑
    gimp
        102
    gimp  
       2020-06-11 17:59:38 +08:00
    @Hanggi “一 go 到底” 🤣

    一 go 我里 go go
    hyperxu
        103
    hyperxu  
       2020-06-11 18:03:49 +08:00
    问就是 gin
    但是既然你提到了 springboot 一把梭,那可以看看 go 版 spring,https://github.com/go-spring/go-spring
    skyrem
        104
    skyrem  
       2020-06-11 18:03:55 +08:00
    借楼问一句,B 站貌似也是 go ,用的啥框架?
    maoxs2
        105
    maoxs2  
       2020-06-11 18:07:44 +08:00 via Android
    不用框架。gayhub 静态页面加官方 net 包直接撸 api 。本身就是图它简单才用的没必要自己加戏。
    SwagXin
        106
    SwagXin  
       2020-06-11 18:14:20 +08:00
    不用
    di1012
        107
    di1012  
       2020-06-11 18:18:23 +08:00
    gin beego 二选一
    ditel
        108
    ditel  
       2020-06-11 18:56:42 +08:00 via Android
    @skyrem 自己写的吧,上次 b 站的代码可以看下
    agdhole
        109
    agdhole  
       2020-06-11 19:10:50 +08:00   ❤️ 1
    上来就写业务,不用复杂配置,啥都集成了,推荐 asp .net core XD
    allgy
        110
    allgy  
       2020-06-11 19:50:12 +08:00 via Android
    httproter + sqlx
    allgy
        111
    allgy  
       2020-06-11 19:50:58 +08:00 via Android
    更正 httprouter + sqlx
    wslzy007
        112
    wslzy007  
       2020-06-11 20:27:45 +08:00
    wangbenjun5
        113
    wangbenjun5  
       2020-06-11 20:50:20 +08:00
    我只说一句,千万不要用 beego,自带的 orm 太坑了。。。当然你也可以选择接个 gorm
    lithbitren
        114
    lithbitren  
       2020-06-11 20:58:55 +08:00
    go 各个框架的性能根本不是重点考察要素,主要还是看框架本身好不好用。
    LittleYangYang
        115
    LittleYangYang  
       2020-06-11 21:26:06 +08:00
    我比较喜欢用 Echo
    gemini767
        116
    gemini767  
       2020-06-11 23:15:46 +08:00
    如果不需要私有化部署的话,不如升级 paas 或者 saas
    tt0411
        117
    tt0411  
       2020-06-11 23:20:34 +08:00
    Go 适合写业务逻辑清晰稳定的中间件, 做 Web 业务开发真的不合适, 特别是因为没有异常机制, 满屏 if err != nil ...
    kzzhr
        118
    kzzhr  
       2020-06-11 23:58:48 +08:00
    推荐一发 iris,gin 实在是太弱了。用 gin 要么拷一坨代码,要么自己做二次封装。图啥呢
    labulaka521
        119
    labulaka521  
       2020-06-12 00:00:20 +08:00 via iPhone
    fasthttp 听说也不错性能很好呢
    zzlettle
        120
    zzlettle  
       2020-06-12 00:24:26 +08:00   ❤️ 5
    go 开发 web 其实效率很低,现在基本没有哪个框架够得上及格线。
    所谓百花齐放,其实就是在说一堆垃圾,一个能打的都没有
    gin 什么的,谁用谁知道,跟没有框架,用 go 直接撸基本没有什么区别
    什么框架太重,我就喜欢这样么重口味的,最好是那种一键就自动生成,就是楼主说的,只用写逻辑不用关心其他的
    越重越好。
    我现在用 django,起码开发的时候基本可以做到只关心逻辑。运行效率根本不在考虑的选项。开发效率才是最重要的
    40huo
        121
    40huo  
       2020-06-12 00:34:42 +08:00
    @zzlettle #120 同意,小项目写的爽才重要,性能不够到时候重写都行
    Hanggi
        122
    Hanggi  
       2020-06-12 00:40:52 +08:00
    @zzlettle go 做 web 效率低能说出个 1 2 3 吗?很好奇是怎么开发的。
    跟 go 直接撸没有区别?你当 github 3 万 stars 都是傻子😓。

    不考虑性能是没问题的,但是如果开发效率在差不多的情况下为什么不用强类型,高性能,轻量级,易扩展的 gin 呢?
    zzlettle
        123
    zzlettle  
       2020-06-12 03:58:42 +08:00   ❤️ 1
    @Hanggi 我是说开发效率。3 万 stars 是不是傻子不知道,django 少说百万的用户量,现在是在比拼人数?自己开发的时候,心里没有个数吗。gin 框架自己都说了,只是把一些基本的东西整合,简化下,你要开发一些 web 基本的模块,还是要自己写。他只是帮你简化,不用一个函数套一个函数。gin 开发最大量的就是 api,说的简单点,基本就是一个数据库的 go 接口超级强化版,让前端来调用数据。开发个传统意义的 web,你试试,各种库用到你要死的心都有.
    zzlettle
        124
    zzlettle  
       2020-06-12 04:08:40 +08:00   ❤️ 1
    @Hanggi 用 gin 开发有一个不是很大,但是确比较限制的问题,就是 router,也就是 url.因为他用的 router 库的原因,导致了他开发的网站的 url,不是能全部 2 级的地址。本来这个不是大问题,但是现在就有这么一个需要怎么办。比如开发一个需要 seo 的网站,比如商城,现在需要所有的商品和类目都是这样的 地址
    /prod1
    /prod2
    /class1
    /class2
    也就是说,不能用以前常用的那种
    /class1/prod1
    /class2/prod2
    必须部分级别部分产品,不分文章
    全部都是一级的地址
    gin 的 router 模块就实现不了这样的效果
    必须换别的 router
    gin 换 router 基本就是要换 gin
    lithbitren
        125
    lithbitren  
       2020-06-12 05:14:09 +08:00
    只用过 gin,不考虑 beego,有哪个 diao 大的港港国产 gf 有啥坑吗,用的人少,网上都没啥深度评测
    Hanggi
        126
    Hanggi  
       2020-06-12 07:42:57 +08:00
    @zzlettle 你说的这个问题确实存在,但这个其实不是 gin 的问题,而是 httprouter 会产生 wildcard conflict 的问题。
    但是并不是说必须要做成你说的那样,你说的那个只是其中一种解决方法,网上搜搜的话能搜到很多解决方案。
    https://hanggi.me/post/golang/wildcard-conflict/

    httprouter 自己也说,他们就是故意这么做的,要的就是一个性能,如果无法接受可以选择其他不使用 httprouter 的框架。


    还有,gin 本身就是一个轻量级、高性能框架。他帮你把 go 语言这类静态语言中很多麻烦的数据绑定、解析、校验的工作都给你做好了,剩下的只要按你的要求添加 gorm, go-jwt, 等库就好了,还要啥。

    如果你一定需要一个 full solution 可能确实要自己费点功夫,但也不是你说的自己手撸个什么出来,都是有可以直接拿来用的方案的。
    orm
        127
    orm  
       2020-06-12 07:58:45 +08:00
    上来就写业务代码?
    rails(ruby) https://rubyonrails.org
    grails(java) https://grails.org
    orm
        128
    orm  
       2020-06-12 08:03:45 +08:00
    grails 应该是 groovy
    jss
        129
    jss  
       2020-06-12 08:15:22 +08:00 via iPhone
    @tt0411 不需要 if 判断,单独封装一个 error 处理,err != nil 直接 panic 让中间件去捕获 panic
    beginor
        130
    beginor  
       2020-06-12 08:25:12 +08:00 via Android   ❤️ 1
    ASP.NET Core +1
    qloog
        131
    qloog  
       2020-06-12 08:49:01 +08:00
    @allgy 玩的存原生~ ,点赞
    qloog
        132
    qloog  
       2020-06-12 08:50:16 +08:00
    @kzzhr 或许是自由吧,有个架子,其他都是自己撸~
    WeaponXu
        133
    WeaponXu  
       2020-06-12 09:05:41 +08:00
    我也想知道有没有深度的 GoFrame 用户评价一下框架,最近看到越来越多人使用。
    raptor
        134
    raptor  
       2020-06-12 09:24:25 +08:00
    只用过 gin,还可以。

    另外,python 的 swagger 怎么不行了? flask-swagger 要手撸注释是麻烦一点,但不是还有 flask-restx(原 restplus)嘛,很方便的啊。
    Rebely
        135
    Rebely  
       2020-06-12 09:36:11 +08:00
    @skyrem b 站应该是使用基于 gin 自己二次开发的 blade 框架
    yannxia
        136
    yannxia  
       2020-06-12 09:39:20 +08:00
    leon0903
        137
    leon0903  
       2020-06-12 09:45:20 +08:00
    @yannxia 官方,社区等的确是不推荐这么做的。 但是我们是这么用的,因为你 web 应用用这个方法可以做到任意层级的返回。 你如果不这么做,就只能吧框架的 context 一层层传递下去,而且还要保证上层在返回后要 return 。 是非常痛苦的。
    cbasil
        138
    cbasil  
       2020-06-12 09:50:35 +08:00
    推荐 goframe 框架,里面封装的方法开箱即用,非常方便。功能全面,是一款模块化、高性能、生产级的 Go 基础开发框架
    sagaxu
        139
    sagaxu  
       2020-06-12 09:53:33 +08:00 via Android
    @leon0903 没有异常机制,硬要模拟
    damngood
        140
    damngood  
       2020-06-12 09:56:26 +08:00
    go 所谓的框架真的没什么所谓, 随便挑一个不太冷门看着顺眼的就好.
    namelosw
        141
    namelosw  
       2020-06-12 09:57:55 +08:00
    上来就写业务感觉还是没人打得过 Rails
    someonedeng
        142
    someonedeng  
       2020-06-12 10:36:06 +08:00
    gin 就行了
    pliex
        143
    pliex  
       2020-06-12 10:53:08 +08:00   ❤️ 1
    尝试一下我的 gin-vue-admin 吧 重点放在前台业务就好了 很香的 : https://github.com/flipped-aurora/gin-vue-admin
    yannxia
        144
    yannxia  
       2020-06-12 11:04:33 +08:00
    @leon0903 社区不接受异常,也算是半排斥写业务系统……
    ccav
        145
    ccav  
       2020-06-12 15:37:17 +08:00
    一直用 gin.
    xyqhkr
        146
    xyqhkr  
       2020-06-12 19:24:36 +08:00
    go 的外包只推荐 GoFrame
    gaigechunfeng
        147
    gaigechunfeng  
    OP
       2020-06-14 22:53:50 +08:00
    @zzlettle XD 目前用 djg,听你说效率肯定没问题。 另外这个框架性能,和占用资源如何? spring 就是太耗资源
    gaigechunfeng
        148
    gaigechunfeng  
    OP
       2020-06-14 22:55:01 +08:00
    @brucewuio 4G 运行一个肯定是没问题。 一个 spring boot 跑起来,都搞到快 1 个 G 内存了。 我们项目慢慢多起来了,担心多了顶不住。
    gaigechunfeng
        149
    gaigechunfeng  
    OP
       2020-06-14 22:56:17 +08:00
    @pliex 感谢 gin-vue-admin 作者都来回帖。 我看到好几个 xd,包括网上都在说 gin 的 router 是短板。 你肯定有深入的理解,你觉得呢?
    gaigechunfeng
        150
    gaigechunfeng  
    OP
       2020-06-14 23:03:47 +08:00
    @dhssingle .net core 的各种库资源多吗,有没有类似 mybatis 的数据库插件,或者各种微信小程序库的插件这些。我渐渐的对.net 产生了性趣
    pliex
        151
    pliex  
       2020-06-16 14:33:32 +08:00
    @gaigechunfeng gin 说实话是什么都没有 所以需要对它进行大量的封装和其他模块的引用 灵活性大对应带来的就是功能少 而功能齐全则带来的缺点就是业务繁多 所以 还是需要自己去权衡做出选择了
    gaigechunfeng
        152
    gaigechunfeng  
    OP
       2020-06-18 11:05:12 +08:00
    @hjahgdthab750 兄弟能否留个 wx,我加你,请教一些问题。非伸手党。
    Martox
        153
    Martox  
       2020-07-10 15:56:11 +08:00
    还缺人么。前端想转后端。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2764 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 14:32 · PVG 22:32 · LAX 06:32 · JFK 09:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.