V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
szzhiyang

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

  •  
  •   szzhiyang · Jan 9, 2020 · 24320 views
    This topic created in 2303 days ago, the information mentioned may be changed or developed.
    Supplement 1  ·  Jan 9, 2020

    GinEcho 哪个更好?


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

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

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

    orm 用的 xorm!

    我个人用过 xorm 和 gorm 还有 beego 自带的 orm
    coolzilj
        32
    coolzilj  
       Jan 9, 2020
    orm,相比 gorm 这类 code-first 的方案,更喜欢 sqlboiler 这种 database-first code-generation 方案
    inframe
        33
    inframe  
       Jan 10, 2020
    gorm 还行,虽然有时候有奇奇怪怪的预定义值
    Kisesy
        34
    Kisesy  
       Jan 10, 2020
    gin 有路由冲突还有上下文是个结构,不能扩充更多功能,echo 就没这些问题,不过开发不太活跃
    hehe12dyo
        35
    hehe12dyo  
       Jan 10, 2020
    gin,
    lyu0317
        36
    lyu0317  
       Jan 10, 2020 via iPhone
    gin+gorm
    cmdOptionKana
        37
    cmdOptionKana  
       Jan 10, 2020
    这个 https://upper.io/db.v3/ 非常好用!
    Akkuman
        38
    Akkuman  
       Jan 10, 2020 via Android
    写很复杂条件的 sql,我还是喜欢类 mybatis 这种,目前找到的就 xormplus
    missdeer
        39
    missdeer  
       Jan 10, 2020
    gin+gorm 吧
    Muninn
        40
    Muninn  
       Jan 10, 2020
    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  
       Jan 10, 2020
    gin+gorm
    AlphaTr
        42
    AlphaTr  
       Jan 10, 2020 via iPhone
    echo+gorm
    johng
        43
    johng  
       Jan 10, 2020   ❤️ 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  
       Jan 10, 2020
    目前正在用 goframe
    jackmrzhou
        45
    jackmrzhou  
       Jan 10, 2020 via iPhone
    看到没人推荐 beego 我就放心了。主流还是 gin+gorm。但是 gin 不像一个真正的 web 框架,小项目用起来挺爽,大项目用起来就感觉缺点什么,作者本身在 issue 里也回应那些要更多更上层 feature 的人说这只是一个微框架而已。gorm 也一样,半年前用的时候对批量操作的支持真的稀烂。所以如果是初入 go 建议这两个都先用用,同时看看一些其他的 framework,然后就会意识到 go 的生态就这样。
    zhuzhiqiang
        46
    zhuzhiqiang  
       Jan 10, 2020
    labulaka521
        47
    labulaka521  
       Jan 10, 2020 via Android
    gin+手写 sql
    liion
        48
    liion  
       Jan 10, 2020
    Kratos 有用过的吗?
    ncwtf
        49
    ncwtf  
       Jan 10, 2020
    @jackmrzhou 45# beego 咋了。。只写了一个 golang 项目,用的 beego,感觉还行啊。
    byx
        50
    byx  
       Jan 10, 2020 via iPhone
    gin + sqlx
    richzhu
        51
    richzhu  
       Jan 10, 2020
    @polythene 哇塞! 感谢 学一下去!
    zzzmode
        52
    zzzmode  
       Jan 10, 2020
    gin+gorm
    fengyj
        53
    fengyj  
       Jan 10, 2020 via Android
    web 框架: gin, echo
    orm: xorm, grom
    个人常用 gin xorm
    fanpei0121
        54
    fanpei0121  
       Jan 10, 2020
    @Trim21 https://github.com/t-tiger/gorm-bulk-insert 可以用这个库配合 gorm 批量插入哦
    pandanrain123
        55
    pandanrain123  
       Jan 10, 2020
    gin + sqlx
    shoaly
        57
    shoaly  
       Jan 10, 2020
    @ncwtf 语言 or 框架之争 这么多年不都是这样地么.... 就跟武侠里面的门派一样, 都说天下第一
    MarksGui
        58
    MarksGui  
       Jan 10, 2020
    @Trim21 自己构建一个语句不就得了
    2kCS5c0b0ITXE5k2
        59
    2kCS5c0b0ITXE5k2  
       Jan 10, 2020
    gin + gorm
    jackmrzhou
        60
    jackmrzhou  
       Jan 10, 2020 via iPhone
    @ncwtf 估计要么你还在用老一套的方式管理 golang 的依赖,要么你就没有使用那个注解路由的特性。beego 注解路由在 go mod 是没办法用的,我有修提 pull request,但是很久都没有回复(我猜测是 issue 区国人灌水严重,而且没有稳定的维护团队)。beego 应该已经不怎么活跃了,上次 commit 还是 11 月,所以不怎么推荐了。
    fanpei0121
        61
    fanpei0121  
       Jan 10, 2020
    @jackmrzhou 真的停止维护了吗, 看来要转 gin 了
    janxin
        62
    janxin  
       Jan 10, 2020
    @jackmrzhou 应该没有,哪一个 PR 我给他们开发说一下
    AmrtaShiva
        63
    AmrtaShiva  
       Jan 10, 2020
    nigulasida
        64
    nigulasida  
       Jan 10, 2020
    @sunmoon1983
    @johng

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

    ORM - gorm or xorm
    gxm44
        79
    gxm44  
       Jan 10, 2020
    echo + 1
    lj3lj3
        80
    lj3lj3  
       Jan 10, 2020
    echo 文档稍好
    gorm 比较起来稍好一点
    zhangjiale
        81
    zhangjiale  
       Jan 10, 2020
    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  
       Jan 11, 2020
    iris + gorm
    William911
        83
    William911  
       Jan 11, 2020
    题外话, 各位有好用的类似 swagger 的 go api 文档生成轮子推荐的吗?
    KickAssTonight
        84
    KickAssTonight  
       Jan 11, 2020
    感觉 gorm 和 xorm 都不能算是真正的 ORM
    kiddingU
        85
    kiddingU  
       Jan 14, 2020
    @fanpei0121 beego bee 工具都不支持 mod,去年就有人提了,但是就是没改动,感觉确实都没啥人维护了
    fizzday
        86
    fizzday  
       Mar 9, 2020
    go orm 当然选择 gorose 了, 谁用谁知道
    wzw
        87
    wzw  
       Apr 19, 2020
    @kidlj #2 是不是说 Echo 比 gin 更好些 restful api?
    kidlj
        88
    kidlj  
       Apr 19, 2020 via iPhone
    @wzw 不是,是说框架的接口设计得更好,比如集中式的错误处理,用 next 函数显式控制下个中间件的执行,validator 客制化等。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2415 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 253ms · UTC 11:48 · PVG 19:48 · LAX 04:48 · JFK 07:48
    ♥ Do have faith in what you're doing.