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

Go 的 Web 框架哪家强

  •  
  •   wenbinwu · 2017-03-02 19:35:48 +08:00 · 6154 次点击
    这是一个创建于 2605 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Go 有不少 web 框架,很多都不是很完善,现在哪个发展的比较好?

    第 1 条附言  ·  2017-03-02 22:14:48 +08:00
    群众们反应 iris 作者不尊重 contributor , awesome-go 拒绝添加 iris 链接
    https://github.com/avelino/awesome-go/pull/1137

    Gin 和 Echo 是好的选择
    Gin
    https://github.com/gin-gonic/gin

    Echo
    https://github.com/labstack/echo
    84 条回复    2017-03-07 13:49:33 +08:00
    notes
        1
    notes  
       2017-03-02 19:39:09 +08:00 via Android
    试试 beego 支持下国产
    loading
        2
    loading  
       2017-03-02 19:42:38 +08:00 via Android
    目前在用 echo ,要很多轮子。

    beego 失去了 golang 的特点,但是开箱就能用。
    scnace
        3
    scnace  
       2017-03-02 19:43:42 +08:00 via Android
    主要看你 web 框架的用途吧(话说既然发在了 go 节点 那么不是应该在 go 节点里找一找呢?之前有很多菊苣讨论过🙈
    timothyye
        4
    timothyye  
       2017-03-02 20:03:39 +08:00 via Android
    revel , beego , iris , echo , gin
    shidenggui
        5
    shidenggui  
       2017-03-02 20:13:02 +08:00
    用过 gin 开发过不少项目,挺不错的
    plqws
        6
    plqws  
       2017-03-02 20:14:35 +08:00
    千万不要用 iris 。。。血泪教训。。。
    0915240
        7
    0915240  
       2017-03-02 20:14:45 +08:00
    gin 还不错。
    janxin
        8
    janxin  
       2017-03-02 20:16:02 +08:00
    用的 echo
    realpg
        9
    realpg  
       2017-03-02 20:28:38 +08:00
    beego: 让你找回 php 的感觉……
    Muninn
        10
    Muninn  
       2017-03-02 20:31:25 +08:00 via Android
    echo
    kuaner
        11
    kuaner  
       2017-03-02 20:32:54 +08:00 via iPhone
    千万不要用 iris
    mocos
        12
    mocos  
       2017-03-02 20:33:15 +08:00 via Android
    macaron
    neoz
        13
    neoz  
       2017-03-02 20:47:13 +08:00
    公司在用 gin
    abujj
        14
    abujj  
       2017-03-02 21:07:04 +08:00 via Android
    @plqws iris 怎么了?为啥?
    abujj
        15
    abujj  
       2017-03-02 21:07:37 +08:00 via Android
    @kuaner iris 怎么了?为啥?
    abujj
        16
    abujj  
       2017-03-02 21:08:32 +08:00 via Android
    准备上 iris 。。。突然看到不推荐 我的内心啊。。。
    88250
        17
    88250  
       2017-03-02 21:11:21 +08:00
    不用框架 :D
    tkisme
        18
    tkisme  
       2017-03-02 21:16:31 +08:00
    fasthttp
    kappa
        19
    kappa  
       2017-03-02 21:18:25 +08:00
    @abujj 作者偷代码。。

    一个月前问肯定推荐 gin ,现在的话不会了。。
    fuxiaohei
        20
    fuxiaohei  
       2017-03-02 21:29:19 +08:00
    @kappa 你遇到 gin 什么问题了?
    kappa
        21
    kappa  
       2017-03-02 21:33:18 +08:00
    @fuxiaohei

    https://github.com/gin-gonic/gin/issues/794 这么久了没有人管,现在 javierprovecho 也没怎么花心思在项目上,感觉要坑。。
    fuxiaohei
        22
    fuxiaohei  
       2017-03-02 21:39:42 +08:00
    @kappa 看着最近几小时有回复了。。估计用 gopkg.in 和 canonical import paths 来吧
    kappa
        23
    kappa  
       2017-03-02 21:42:49 +08:00
    @fuxiaohei 哪有 maintainer 回复? gopkg 等官方 dep 正式发布以后恐怕就和 godeps 一样慢慢退出舞台了,现在切过去意义有多大,而且还搞个半吊子就不动了。。
    fuxiaohei
        24
    fuxiaohei  
       2017-03-02 21:49:28 +08:00
    @kappa 最后那个人是 member 啊,我看讨论的和 dep 没关系,是他们自己 import path 混乱。 canonical import paths 就是解决这个问题的
    abujj
        25
    abujj  
       2017-03-02 21:49:35 +08:00 via Android
    。那现在推荐用哪个?
    zysidea
        26
    zysidea  
       2017-03-02 21:51:08 +08:00 via Android
    @notes 不要用 beego
    fuxiaohei
        27
    fuxiaohei  
       2017-03-02 21:52:04 +08:00
    @abujj gin 或者 echo
    kappa
        28
    kappa  
       2017-03-02 22:00:42 +08:00
    @fuxiaohei canonical import paths 对于一般的项目意义不大,这个问题就是他们自己管杀不管埋瞎搞出来的,以前用 gopkg 最大的意义也是版本控制而不是解决依赖路径,现在这个节骨眼上再投靠过去真不合适。
    kappa
        29
    kappa  
       2017-03-02 22:04:10 +08:00
    @abujj 不描述需求就伸手的都是耍流氓
    Reficul
        30
    Reficul  
       2017-03-02 22:05:44 +08:00 via Android
    @realpg 你这么说,突然想起谢大本来是写 PHP 的……
    fuxiaohei
        31
    fuxiaohei  
       2017-03-02 22:08:36 +08:00
    @kappa 不是投靠过去,他的 readme 也是 gopkg.in 的 import 了,只是用 canonical import paths 可以强制 import 路径。 github.com 的 import 就编译不过去。一刀切一下把事情处理掉好了
    kappa
        32
    kappa  
       2017-03-02 22:09:47 +08:00
    @fuxiaohei 现在的问题是 contrib 好些都没跟着改,本来就编译不过。。
    kappa
        33
    kappa  
       2017-03-02 22:12:08 +08:00
    @fuxiaohei 现状下切换到 gopkg.in 没什么意义,而且 gopkg 服务最近几个月一直不稳定
    realpg
        34
    realpg  
       2017-03-02 22:21:25 +08:00
    @Reficul #30
    我才知道,为什么会有这种感觉
    感谢解惑
    buseni
        35
    buseni  
       2017-03-02 23:12:52 +08:00 via Android
    beego 就类似于 thinkphp ,一天就可以撸代码了
    csyangchen
        36
    csyangchen  
       2017-03-02 23:15:46 +08:00
    gin 不错, 功能基本都有, 但不会太 framework 限制你的使用.
    relaxgo
        37
    relaxgo  
       2017-03-02 23:22:47 +08:00 via iPhone
    从 echo 转到 chi , echo api 也不稳定
    aljun
        38
    aljun  
       2017-03-02 23:42:09 +08:00
    说 iris 的。。。你们真的看过 iris 源码么。。。。
    其实我个人之前用框架。。。看了源码之后发现。。。
    一个 http parser 就能解决很多需求。。
    aljun
        39
    aljun  
       2017-03-02 23:44:37 +08:00
    @aljun 手急了。。。应该是 http router 。。。别的自己撸就好

    [https://github.com/julienschmidt/httprouter]( https://github.com/julienschmidt/httprouter)
    nicevar
        40
    nicevar  
       2017-03-02 23:50:57 +08:00
    前阵子也不知道该选哪个框架,大致了解了几个然后选择了 gin ,挺好用的,花了一周时间把 ssh 的项目移植过来了
    leedstyh
        41
    leedstyh  
       2017-03-03 00:11:27 +08:00
    echo ,这个框架本来就有够好, go1.8 之后, go 的 web 服务可以裸跑了,不需要 nginx (之前看过一篇文章介绍的),而 echo 也提供了很多必要的功能。
    Comdex
        42
    Comdex  
       2017-03-03 00:34:53 +08:00
    macaron
    zonghua
        43
    zonghua  
       2017-03-03 00:38:53 +08:00 via iPhone
    @realpg 是 ThinPHP 的感觉
    heimeil
        44
    heimeil  
       2017-03-03 01:34:42 +08:00 via Android
    Gorilla web toolkit
    jarlyyn
        45
    jarlyyn  
       2017-03-03 01:40:11 +08:00
    自己写的路过。

    go 本身的组建已经很强了。

    搞个中间件粘一下,搞个路由,搞下缓存。

    基本齐活可以玩了。
    jarlyyn
        46
    jarlyyn  
       2017-03-03 01:49:34 +08:00
    我用过的几个组件推荐下

    中间件: https://github.com/urfave/negroni

    类 express 这个可用。但源代码部分有点不喜欢,重头写了

    路由:https://github.com/julienschmidt/httprouter

    这个还不错。调整一下也可以实现子路由的功能


    内存缓存:https://github.com/coocood/freecache
    可以做本地缓存用

    序列化反序列化 :https://github.com/vmihailenco/msgpack
    效率可能不是最高的。但是和原声的 json 包一样, interface 直接丢进去就可以了,省心。比 gob 效率高很多。

    mysql/sqlite 的驱动。外加标准库的 template 等一些库。

    普通的网站能搞的很不错了。
    fundon
        47
    fundon  
       2017-03-03 03:46:53 +08:00
    echo
    Unknwon
        48
    Unknwon  
       2017-03-03 03:59:09 +08:00
    @kappa dep 目前与官方无关

    gopkg.in 目前非 vendor 机制下的版本处理兼容性最好
    WildCat
        49
    WildCat  
       2017-03-03 04:58:09 +08:00
    @jarlyyn ORM 哪家强?
    wenbinwu
        50
    wenbinwu  
    OP
       2017-03-03 05:08:10 +08:00
    @WildCat 刚发现 https://github.com/jinzhu/gorm ,感觉挺好
    WildCat
        51
    WildCat  
       2017-03-03 05:10:45 +08:00
    @wenbinwu 只有这个火了 =。=


    @Unknwon 这个是 golang 社区的大神!你好!
    ETiV
        52
    ETiV  
       2017-03-03 05:17:05 +08:00 via iPhone
    gorm 文档写的不认真……特别是大小写,这个看着看着就能在脑内自动纠正了

    还一问题就是,复合主键的情况下,调 AutoMigration 创建表。会报自增键只能有一个的错,导致表无法创建成功。
    timothyye
        53
    timothyye  
       2017-03-03 08:11:15 +08:00 via Android
    @leedstyh 裸跑是神马意思,可以自己绑定域名了?
    TangMonk
        54
    TangMonk  
       2017-03-03 08:22:06 +08:00 via Android   ❤️ 1
    用 rust 的 rocket 呗
    twm
        55
    twm  
       2017-03-03 08:30:00 +08:00
    千万不要用 go 开发 web 应用
    Felldeadbird
        56
    Felldeadbird  
       2017-03-03 09:09:02 +08:00
    @twm 为什么啊?不是说 go 在并发处理方面有得天独厚的能力吗?
    torbrowserbridge
        57
    torbrowserbridge  
       2017-03-03 09:17:04 +08:00
    janxin
        58
    janxin  
       2017-03-03 09:22:08 +08:00 via iPhone
    @Felldeadbird 没有脚本语言灵活
    Akagi201
        59
    Akagi201  
       2017-03-03 09:40:49 +08:00
    自己撸框架吧. 帖下我的
    https://github.com/Akagi201/light
    基于 标准的 http middleware 管理包 alice 跟 性能最强的 httprouter. 兼容 context 包.
    自己撸框架的好处是, 可以自由添加底层代码, 缺什么就加什么. 而且时间紧时可以不用写测试代码, 提交到官方 repo, 通常要写测试代码, 磨合很久才能合并.
    8355
        60
    8355  
       2017-03-03 09:48:18 +08:00
    我只会 beego 所以没什么可推的 无脑推 beego
    brucefeng
        61
    brucefeng  
       2017-03-03 09:50:54 +08:00
    一直没搞明白, go 在做 web 的时候强点在哪里?
    lgpqdwjh
        62
    lgpqdwjh  
       2017-03-03 10:09:15 +08:00
    写过一个认证服务, 用的 echo 。。。 没我 python 好用
    liguoqinjim
        63
    liguoqinjim  
       2017-03-03 10:11:48 +08:00
    faygo
    qianguozheng
        64
    qianguozheng  
       2017-03-03 10:13:21 +08:00
    @brucefeng 说我的感觉,跟写普通程序很类似。 我本来也没有做过 web 开发,但是发现还是挺容易的
    Immortal
        65
    Immortal  
       2017-03-03 10:15:37 +08:00
    现在在用 gin 吧
    推荐 echo 和 gin
    go 写 web 建议还是做 api 为主 前后分离的做
    像传统 php 或者其他那样耦合的 go 也不算特别合适 官方模板库挺不好用
    orderc
        66
    orderc  
       2017-03-03 10:25:42 +08:00
    macaron
    janxin
        67
    janxin  
       2017-03-03 10:35:08 +08:00   ❤️ 1
    @brucefeng 跟脚本比不复杂多少但是提供更高的性能,更容易写出高吞吐 API 。不过和页面紧耦合就是痛苦了,所有的静态语言通病吧。
    zeroten
        68
    zeroten  
       2017-03-03 10:38:28 +08:00
    @janxin 为啥要和页面耦合?前后端分离呗
    nicevar
        69
    nicevar  
       2017-03-03 10:38:32 +08:00   ❤️ 1
    @brucefeng 接触 go 没多久,之前 web 都是用 java 做的,初步感觉 go 简洁易用,我那个笨重 ssh 项目后台管理用 java+ExtJs , api 部分现在改用 go 了,开发速度快多了,个人不太喜欢 python 的框架,依赖有时候很乱,发布也不太方便
    jarlyyn
        70
    jarlyyn  
       2017-03-03 10:40:14 +08:00   ❤️ 1
    @brucefeng

    凭心而论, go 写 web 不算特别强,但也不算很差。

    主要是 web 大部分的时间都和数据库 /网络传素打交道。

    go 的缺点主要是轮子少。文档太简略,动不动要爬源代码。

    优点是部署简单,静态语言。
    janxin
        71
    janxin  
       2017-03-03 11:04:01 +08:00   ❤️ 1
    @zeroten 看需求决定。我们其实现在基本都是 SPA ,但是也不是所有人都需要 SPA
    simo
        73
    simo  
       2017-03-03 12:40:30 +08:00
    参考 github star 。了解下每个框架的优缺点,找到适合自己业务的。
    目前个人大部分小项目自己撸。
    稍大些的用 gin 和 beego 。
    pacoyang
        74
    pacoyang  
       2017-03-03 14:45:59 +08:00
    gin!
    zzWinD
        75
    zzWinD  
       2017-03-03 15:01:04 +08:00
    strwei
        76
    strwei  
       2017-03-03 17:11:53 +08:00
    逼购
    orvice
        77
    orvice  
       2017-03-03 18:25:49 +08:00
    gin
    该有的都有,不该有的也没有 :)
    orvice
        78
    orvice  
       2017-03-03 18:29:05 +08:00
    @brucefeng 纯 api 项目 golang 开发很爽的。

    去渲染 html 就蛋疼
    leedstyh
        79
    leedstyh  
       2017-03-03 21:56:16 +08:00   ❤️ 1
    @timothyye 就是不需要 nginx 反代, go 的 web 程序直接跑在生产环境。

    https://news.ycombinator.com/item?id=13213902

    当然,绑定域名这种事,肯定可以,这个是 echo 的做法 ( https://echo.labstack.com/cookbook/subdomains),其实其他的框架也可以
    pathbox
        80
    pathbox  
       2017-03-03 22:24:55 +08:00
    net/http 然后加需要的扩展就够了。 如果真要追求性能, httprouter 和 fasthttp 似乎不错,不过在生产环境还没尝试过
    timothyye
        81
    timothyye  
       2017-03-03 23:17:10 +08:00
    go 的模板渲染感觉不是强项,所以比较好的方案是前后端分离, go 只负责提供后端 API 接口,这绝对是强项,哈哈
    reus
        82
    reus  
       2017-03-04 11:45:58 +08:00
    @timothyye 绑定域名就是检查一下 request 的 Host 字段,不用任何框架都可以
    myself659410
        84
    myself659410  
       2017-03-07 13:49:33 +08:00
    正在试看框架
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2557 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 01:18 · PVG 09:18 · LAX 18:18 · JFK 21:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.