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 · 23277 次点击
    这是一个创建于 1807 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 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
       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
    huiyifyj
        53
    huiyifyj  
       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   ·   实用小工具   ·   2470 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 01:51 · PVG 09:51 · LAX 17:51 · JFK 20:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.