[Go 语言] 目前最好的 Web 框架和 ORM 库是? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
szzhiyang
V2EX    Go 编程语言

[Go 语言] 目前最好的 Web 框架和 ORM 库是?

  •  
  •   szzhiyang 2020-01-09 20:55:08 +08:00 24060 次点击
    这是一个创建于 2170 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言    2020-01-09 22:04:55 +08:00

    GinEcho 哪个更好?


    88 条回复    2020-04-19 11:54:13 +08:00
    eslizn
        1
    eslizn  
       2020-01-09 21:00:36 +08:00
    gin 除了不支持路由命名以外暂时找不到其他缺点了
    除了 gorm 还有其他*更好*的选择?
    kidlj
        2
    kidlj  
       2020-01-09 21:05:07 +08:00 via iPhone
    更喜欢 Echo, better API.
    gogobody
        3
    gogobody  
       2020-01-09 21:12:58 +08:00 via Android
    歪楼求问,就框架而言 iris 怎么样啊
    Leigg
        4
    Leigg  
       2020-01-09 21:14:01 +08:00 via Android
    哪有最好,我用的 iris,功能全面,速度不输 gin
    Leigg
        5
    Leigg  
       2020-01-09 21:14:34 +08:00 via Android
    然后是 xorm
    lqs
        6
    lqs  
       2020-01-09 21:15:46 +08:00
    借地推销一下我写的 sqlingo
    https://github.com/lqs/sqlingo
    szzhiyang
        7
    szzhiyang  
    OP
    &nbs;  2020-01-09 21:23:40 +08:00
    @Leigg XORM 貌似不支持 Associations 啊。
    richzhu
        8
    richzhu  
       2020-01-09 21:25:36 +08:00
    用 gin 的飘过~ 暂时没有#1 说的那些需求,所以没感觉到明显的缺点
    同也是用的 gorm
    waising
        9
    waising  
       2020-01-09 21:33:44 +08:00
    gin + sqlx
    szzhiyang
        10
    szzhiyang  
    OP
       2020-01-09 21:39:43 +08:00   1
    @Leigg Iris 的模型绑定功能不如 gin 的方便。
    polythene
        11
    polythene  
       2020-01-09 21:40:16 +08:00   3
    试试 facebooke 开源的 ORM 框架 ent: https://github.com/facebookincubator/ent
    szzhiyang
        12
    szzhiyang  
    OP
       2020-01-09 21:42:49 +08:00
    @polythene 感谢,之前一直不知道这个。
    fuxiaohei
        13
    fuxiaohei  
       2020-01-09 21:42:53 +08:00
    gin + dbr
    hantsy
        14
    hantsy  
       2020-01-09 21:43:06 +08:00   1
    Trim21
        15
    Trim21  
       2020-01-09 21:44:15 +08:00   1
    gorm 不支持批量插入,好难受。。。
    pubby
        16
    pubby  
       2020-01-09 21:44:51 +08:00 via Android
    gin,路由用 gorilla/mux
    gorm
    itskingname
        17
    itskingname  
       2020-01-09 21:45:20 +08:00 via iPhone
    @gogobody Iris 弄跨域太麻烦了
    jss
        18
    jss  
       2020-01-09 21:48:41 +08:00 via iPhone
    @Trim21 批量插入有解决方案的
    Achilless
        19
    Achilless  
       2020-01-09 21:50:00 +08:00
    你们都用 gin 写什么呀
    jss
        20
    jss  
       2020-01-09 21:50:18 +08:00 via iPhone
    @pubby 老哥,gin 有没有可分享的项目源码 参考一下
    pubby
        21
    pubby  
       2020-01-09 21:51:21 +08:00 via Android
    @jss 没有,都是公司项目
    heww
        22
    heww  
       2020-01-09 21:52:25 +08:00 via iPhone
    @eslizn 有个印尼人写的 rel 库看着还不错!
    heww
        23
    heww  
       2020-01-09 21:54:11 +08:00 via iPhone
    yiplee
        24
    yiplee  
       2020-01-09 21:59:13 +08:00
    go-chi/chi + jmoiron/sqlx
    ArJun
        25
    ArJun  
       2020-01-09 22:05:59 +08:00
    主流都是 gin + gorm
    eslizn
        26
    eslizn  
       2020-01-09 22:09:45 +08:00
    补充一个,如果不考虑性能,我会选择 martini
    saltsugar
        27
    saltsugar  
       2020-01-09 22:12:36 +08:00
    gowk
        28
    gowk  
       2020-01-09 22:18:50 +08:00   1
    不喜欢 ORM,轻量级的 sqlx 足矣。
    或者 sqlx 的轻量级封装: https://github.com/ilibs/gosql
    目前感觉良好
    gowk
        29
    gowk  
       2020-01-09 22:20:15 +08:00
    @heww 呵呵,一看你就经常逛 reddit:/r/golang
    dodo2012
        30
    dodo2012  
       2020-01-09 22:45:25 +08:00
    开始用的 gin,后来自己参考了一堆,自己搭了一个,主要是自己扩展起来方便,orm 就用了 gorm
    ylsc633
        31
    ylsc633  
       2020-01-09 23:38:23 +08:00
    @Achilless
    @jss

    gin 写的博客! 也就是简单的 curd!
    gin 封装的包,供上面的博客所用!

    博客地址: https://www.iphpt.com/
    代码是开源!

    orm 用的 xorm!

    我个人用过 xorm 和 gorm 还有 beego 自带的 orm
    coolzilj
        32
    coolzilj  
       2020-01-09 23:52:15 +08:00
    orm,相比 gorm 这类 code-first 的方案,更喜欢 sqlboiler 这种 database-first code-generation 方案
    inframe
        33
    inframe  
       2020-01-10 00:48:44 +08:00
    gorm 还行,虽然有时候有奇奇怪怪的预定义值
    Kisesy
        34
    Kisesy  
       2020-01-10 04:03:55 +08:00
    gin 有路由冲突还有上下文是个结构,不能扩充更多功能,echo 就没这些问题,不过开发不太活跃
    hehe12dyo
        35
    hehe12dyo  
       2020-01-10 08:00:30 +08:00
    gin,
    lyu0317
        36
    lyu0317  
       2020-01-10 08:15:26 +08:00 via iPhone
    gin+gorm
    cmdOptionKana
        37
    cmdOptionKana  
       2020-01-10 08:54:54 +08:00
    这个 https://upper.io/db.v3/ 非常好用!
    Akkuman
        38
    Akkuman  
       2020-01-10 09:10:54 +08:00 via Android
    写很复杂条件的 sql,我还是喜欢类 mybatis 这种,目前找到的就 xormplus
    missdeer
        39
    missdeer  
       2020-01-10 09:18:59 +08:00
    gin+gorm 吧
    Muninn
        40
    Muninn  
       2020-01-10 09:24:44 +08:00
    https://tech.crandom.com/post/2017/echo-error/

    这是我早年从 gin 转到 echo 的原因,就因为 echo 多了个这。
    不知道现在 gin 的错误处理有没有更灵活。

    gorm 现在比以前也好很多了。前几天试了一下,slice of struct 类型的列表数据,preload 时它会自动用 in 关键字,只会出来俩 sql,早年的时候有 n 行就有 n+1 个 sql,导致很好的 preload 功能在返回列表时没发用。现在很方便的。 就是写 join 还是不那么方便。
    p23XnFNH1Wq953rV
        41
    p23XnFNH1Wq953rV  
       2020-01-10 09:27:41 +08:00
    gin+gorm
    AlphaTr
        42
    AlphaTr  
       2020-01-10 09:30:04 +08:00 via iPhone
    echo+gorm
    johng
        43
    johng  
       2020-01-10 09:36:10 +08:00   2
    正所谓框架肯定要是框架不能是库,当然推荐`GoFrame` https://goframe.org/

    `GF(Go Frame)`是一款模块化、高性能、生产级的 Go 基础开发框架。实现了比较完善的基础设施建设,包括常用的核心开发组件, 如:缓存、日志、文件、时间、队列、数组、集合、字符串、定时器、命令行、文件锁、内存锁、对象池、连接池、资源管理、数据校验、数据编码、文件监控、 定时任务、数据库 ORM、TCP/UDP 组件、进程管理 /通信、并发安全容器等等。 并提供了 Web 服务开发的系列核心组件,如:Router、Cookie、Session、Middleware、服务注册、配置管理、模板引擎等等, 支持热重启、热更新、多域名、多端口、多服务、HTTPS、Rewrite 等特性。

    `GF`实现了非常强大的`ORM` https://goframe.org/database/gdb/index
    sunmoon1983
        44
    sunmoon1983  
       2020-01-10 09:38:52 +08:00
    目前正在用 goframe
    jackmrzhou
        45
    jackmrzhou  
       2020-01-10 09:40:58 +08:00 via iPhone
    看到没人推荐 beego 我就放心了。主流还是 gin+gorm。但是 gin 不像一个真正的 web 框架,小项目用起来挺爽,大项目用起来就感觉缺点什么,作者本身在 issue 里也回应那些要更多更上层 feature 的人说这只是一个微框架而已。gorm 也一样,半年前用的时候对批量操作的支持真的稀烂。所以如果是初入 go 建议这两个都先用用,同时看看一些其他的 framework,然后就会意识到 go 的生态就这样。
    zhuzhiqiang
        46
    zhuzhiqiang  
       2020-01-10 09:50:42 +08:00
    labulaka521
        47
    labulaka521  
       2020-01-10 10:03:40 +08:00 via Android
    gin+手写 sql
    liion
        48
    liion  
       2020-01-10 10:11:34 +08:00
    Kratos 有用过的吗?
    ncwtf
        49
    ncwtf  
       2020-01-10 10:40:02 +08:00
    @jackmrzhou 45# beego 咋了。。只写了一个 golang 项目,用的 beego,感觉还行啊。
    byx
        50
    byx  
       2020-01-10 10:42:34 +08:00 via iPhone
    gin + sqlx
    richzhu
        51
    richzhu  
       2020-01-10 10:45:48 +08:00
    @polythene 哇塞! 感谢 学一下去!
    zzzmode
        52
    zzzmode  
       2020-01-10 10:50:50 +08:00
    gin+gorm
    fengyj
        53
    fengyj  
       2020-01-10 10:53:58 +08:00 via Android
    web 框架: gin, echo
    orm: xorm, grom
    个人常用 gin xorm
    fanpei0121
        54
    fanpei0121  
       2020-01-10 10:58:02 +08:00
    @Trim21 https://github.com/t-tiger/gorm-bulk-insert 可以用这个库配合 gorm 批量插入哦
    pandanrain123
        55
    pandanrain123  
       2020-01-10 10:59:52 +08:00
    gin + sqlx
    jss
        56
    jss  
       2020-01-10 11:02:33 +08:00
    shoaly
        57
    shoaly  
       2020-01-10 11:19:18 +08:00
    @ncwtf 语言 or 框架之争 这么多年不都是这样地么.... 就跟武侠里面的门派一样, 都说天下第一
    MarksGui
        58
    MarksGui  
       2020-01-10 11:24:39 +08:00
    @Trim21 自己构建一个语句不就得了
    2kCS5c0b0ITXE5k2
        59
    2kCS5c0b0ITXE5k2  
       2020-01-10 11:26:25 +08:00
    gin + gorm
    jackmrzhou
        60
    jackmrzhou  
       2020-01-10 11:31:42 +08:00 via iPhone
    @ncwtf 估计要么你还在用老一套的方式管理 golang 的依赖,要么你就没有使用那个注解路由的特性。beego 注解路由在 go mod 是没办法用的,我有修提 pull request,但是很久都没有回复(我猜测是 issue 区国人灌水严重,而且没有稳定的维护团队)。beego 应该已经不怎么活跃了,上次 commit 还是 11 月,所以不怎么推荐了。
    fanpei0121
        61
    fanpei0121  
       2020-01-10 11:38:31 +08:00
    @jackmrzhou 真的停止维护了吗, 看来要转 gin 了
    janxin
        62
    janxin  
       2020-01-10 11:51:24 +08:00
    @jackmrzhou 应该没有,哪一个 PR 我给他们开发说一下
    AmrtaShiva
        63
    AmrtaShiva  
       2020-01-10 12:03:48 +08:00
    nigulasida
        64
    nigulasida  
       2020-01-10 12:10:34 +08:00
    @sunmoon1983
    @johng

    确实好用
    songsong
        65
    songsong  
       2020-01-10 12:44:28 +08:00
    gin gorm, xorm 只从不在 github 更新后我就放弃了
    xmge
        66
    xmge  
       2020-01-10 12:45:54 +08:00
    beego 其实也挺方便的
    dodo2012
        67
    dodo2012  
       2020-01-10 13:18:58 +08:00
    @ncwtf 开始学 go 用一下可以,后面就算了,gin 或者自己用原生都可以,最早我也用过,后来有次有个 bug,提了一直没人回,修没修不清楚了,上次看了下,这个 issue 现在也是没人回,都过了几年了。
    killerv
        68
    killerv  
       2020-01-10 13:40:54 +08:00
    @richzhu 我感觉路由命名是很常用的啊,你的应用没有要输出或者跳转内部链接的地方吗?比如没有登录就跳转到 /login
    OMGZui
        69
    OMGZui  
       2020-01-10 14:42:06 +08:00
    gin + gorm
    fanzheng
        70
    fanzheng  
       2020-01-10 15:54:37 +08:00
    去 golang 的官方看看把 https://go.dev/solutions/webdev/
    fanpei0121
        71
    fanpei0121  
       2020-01-10 16:00:01 +08:00
    讲道理 gin 不能称为框架吧
    Hanggi
        72
    Hanggi  
       2020-01-10 16:04:32 +08:00
    @fanpei0121 那是什么?
    fanpei0121
        73
    fanpei0121  
       2020-01-10 16:07:32 +08:00
    @Hanggi
    CHYK
        74
    CHYK  
       2020-01-10 16:11:51 +08:00
    个人习惯 gin,ORM/ODM 的话要看是否有多数据库兼容需求。
    chennqqi
        75
    chennqqi  
       2020-01-10 16:41:54 +08:00
    gin + xorm
    chennqqi
        76
    chennqqi  
       2020-01-10 16:44:25 +08:00
    @ncwtf beego 太重了,又重又罗嗦 beego 可能类似于 ThinkPHP 那种
    wweir
        77
    wweir  
       2020-01-10 16:45:27 +08:00 via Android
    Go 变成新时代的 PHP 了吗,天天争这些有的没的
    gxm44
        78
    gxm44  
       2020-01-10 17:59:25 +08:00
    RESTful - echo

    ORM - gorm or xorm
    gxm44
        79
    gxm44  
       2020-01-10 17:59:38 +08:00
    echo + 1
    lj3lj3
        80
    lj3lj3  
       2020-01-10 18:38:17 +08:00
    echo 文档稍好
    gorm 比较起来稍好一点
    zhangjiale
        81
    zhangjiale  
       2020-01-10 18:40:43 +08:00
    reddit 上几乎只要一提到 iris,立马就会有一场腥风血雨

    吃瓜链接[A warning about github.com/kataras/iris]( https://www.reddit.com/r/golang/comments/b481q7/a_warning_about_githubcomkatarasiris/)

    有人整理的前因后果[ Why you should not use iris for your Go projects ]( http://www.florinpatan.ro/2016/10/why-you-should-not-use-iris-for-your-go.html)
    glogger
        82
    glogger  
       2020-01-11 09:30:25 +08:00
    iris + gorm
    William911
        83
    William911  
       2020-01-11 10:48:18 +08:00
    题外话, 各位有好用的类似 swagger 的 go api 文档生成轮子推荐的吗?
    KickAssTonight
        84
    KickAssTonight  
       2020-01-11 13:49:31 +08:00
    感觉 gorm 和 xorm 都不能算是真正的 ORM
    kiddingU
        85
    kiddingU  
       2020-01-14 18:43:07 +08:00
    @fanpei0121 beego bee 工具都不支持 mod,去年就有人提了,但是就是没改动,感觉确实都没啥人维护了
    fizzday
        86
    fizzday  
       2020-03-09 12:51:16 +08:00
    go orm 当然选择 gorose 了, 谁用谁知道
    wzw
        87
    wzw  
       2020-04-19 07:49:23 +08:00
    @kidlj #2 是不是说 Echo 比 gin 更好些 restful api?
    kidlj
        88
    kidlj  
       2020-04-19 11:54:13 +08:00 via iPhone
    @wzw 不是,是说框架的接口设计得更好,比如集中式的错误处理,用 next 函数显式控制下个中间件的执行,validator 客制化等。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5031 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 78ms UTC 08:40 PVG 16:40 LAX 00:40 JFK 03:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86