Go 感觉没有一个趁手的 ORM 框架啊? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
KevinBlandy
V2EX    Go 编程语言

Go 感觉没有一个趁手的 ORM 框架啊?

  •  
  •   KevinBlandy 2021-12-05 19:23:22 +08:00 11946 次点击
    这是一个创建于 1473 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我本来是搞 Java 的。一直用 QueryDslJooq 这种 DSL 风格的 ORM ,感觉老棒了。

    但是 Go 好像没,grom/xorm 都 jio 得难用。

    41 条回复    2022-04-28 00:40:38 +08:00
    40EaE5uJO3Xt1VVa
        1
    40EaE5uJO3Xt1VVa  
       2021-12-05 19:31:28 +08:00
    自己写一个 。我也觉得 GROM 老不爽了。
    metamask
        2
    metamask  
       2021-12-05 19:39:14 +08:00   3
    INCerry
        3
    INCerry  
       2021-12-05 19:42:56 +08:00
    go 不是银弹 写比上层代码还是换个语言吧
    hingbong
        4
    hingbong  
       2021-12-05 19:43:42 +08:00
    https://github.com/go-gorm/gen
    这个能靠近一点 jooq 吧
    wellsc
        5
    wellsc  
       2021-12-05 20:00:15 +08:00
    小而丑实现优雅的 orm 不太容易
    wweir
        6
    wweir  
       2021-12-05 20:02:33 +08:00
    用的 didi 的 query 生成器。简单 SQL 生成得很爽,复杂 SQL 手动来更方便
    to2false
        7
    to2false  
       2021-12-05 20:04:46 +08:00
    gorm+gen 、ent 感觉都不错
    to2false
        8
    to2false  
       2021-12-05 20:05:03 +08:00
    @to2false #7 当然跟其他语言的 ORM 比那还是差点意思
    yl20181003
        9
    yl20181003  
       2021-12-05 21:38:30 +08:00
    ent 不错
    FightPig
        10
    FightPig  
       2021-12-05 21:46:41 +08:00   2
    一直写 rails 的人,被 ar 惯坏了,觉得哪个都不方便
    w3cll
        11
    w3cll  
       2021-12-05 22:09:10 +08:00
    laravel 吧
    Hanggi
        12
    Hanggi  
       2021-12-05 23:08:34 +08:00   1
    其实都挺好用的,主要还是先入为主。
    Buges
        13
    Buges  
       2021-12-05 23:22:35 +08:00 via Android   3
    语言的问题。没有好用的语言,不可能写出好用的库。
    chengxiao
        14
    chengxiao  
       2021-12-06 09:23:42 +08:00
    之前都在说没有泛型,ORM 是这样难用的 blabla
    现在有泛型了,看看哪个会变好用
    waising
        15
    waising  
       2021-12-06 09:34:01 +08:00
    ent 应该还可以 不过我用的 squirrel + sqlx 也没啥问题
    masterclock
        16
    masterclock  
       2021-12-06 09:40:03 +08:00
    ent 基于代码生成
    ent 用着麻烦的地方配合 goqu
    qW7bo2FbzbC0
        17
    qW7bo2FbzbC0  
       2021-12-06 09:41:21 +08:00
    sqlx 不错,我比较喜欢写 sql ,而不是生成
    moliliang
        18
    moliliang  
       2021-12-06 10:30:51 +08:00
    用生成器还是可以的,orm 并不好用~~
    lqs
        19
    lqs  
       2021-12-06 11:35:38 +08:00   1
    再次推销一下 sqlingo https://github.com/lqs/sqlingo

    mestrace
        20
    mestrace  
       2021-12-06 11:37:41 +08:00
    约定大于配置。之前团队使用代码生成,写好 SQL DDL 之后可以一键生成常用的 gorm 方法。
    openp2p
        21
    openp2p  
       2021-12-06 11:37:49 +08:00
    以前写了很多年 C++,突然有个写.net 的同事问,公司的里的 C++项目没用 orm 的?觉得有点不可思议。后来写 golang 去了,也遇到有人问同样的问题。于是尝试了几个 golang orm ,发现还是手动挡 sql 舒服。所以,存在即合理,总有人喜欢手动挡,有人喜欢自动挡。买菜喜欢自动,赛车喜欢手动
    cloverzrg2
        22
    cloverzrg2  
       2021-12-06 11:43:58 +08:00
    @hjahgdthab750 #17 容易一不小心就被注入,每次写 prepare 也麻烦
    HanMeiM
        23
    HanMeiM  
       2021-12-06 11:48:05 +08:00
    ent 和 jooq 其实挺像的。
    qW7bo2FbzbC0
        24
    qW7bo2FbzbC0  
       2021-12-06 11:50:07 +08:00
    @cloverzrg2 #22 我是 fmt.Sprintf()生成最终语句,不 prepare ,至于注入,如果是面向外部用户的话,的确要注意
    momowei
        25
    momowei  
       2021-12-06 11:53:35 +08:00
    gorm 也还好,怎么这么多吐槽的
    keepeye
        26
    keepeye  
       2021-12-06 11:58:25 +08:00
    go 既不可能变成动态语言,也不可能变成另一个 java ,取舍一下吧
    Hanggi
        27
    Hanggi  
       2021-12-06 12:18:12 +08:00   1
    总有一些喜欢用记事本写代码的人喊用 IDE 的人都是菜鸟,代码就得纯手写才舒服。
    整的好像用 ORM 的人都看不懂也不会写 SQL 似的。
    项目上点 Star 的那几万人也不可能都傻,肯定是满足了自身需求才用的,觉得不好用就换一个就好了。
    gowk
        28
    gowk  
       2021-12-06 12:49:38 +08:00   5
    一直写 .net 的人,被 ef/dapper 惯坏了,觉得哪个都不方便
    zjsxwc
        29
    zjsxwc  
       2021-12-06 12:59:24 +08:00
    gorm 总比手动 sql 好吧
    Linvas
        30
    Linvas  
       2021-12-06 14:04:54 +08:00
    duanquanyong
        31
    duanquanyong  
       2021-12-06 17:05:45 +08:00
    强裂推荐 sqlc ( https://github.com/kyleconroy/sqlc

    支持各种 migration 工具格式文件,手写 sql quer 文件,生成 go 代码和 Repostiory 接口
    waltcow
        32
    waltcow  
       2021-12-06 17:17:38 +08:00   1
    matrix1010
        33
    matrix1010  
       2021-12-06 17:22:00 +08:00
    对于天天写 CRUD 的兄弟们我只推荐 Ent ,真正的生产力工具。现在 v0.9.1 Custom Template 可扩展的地方更多了,定制化需求也能够满足。个人观点 Go web 开发只有配合代码生成才具有生产力。另外对于写 CRUD 还写测试的兄弟们可以试试我的 factory 轮子: https://github.com/Yiling-J/carrier, 类 factory_bot/boy 自动生成测试数据
    weichengwu
        34
    weichengwu  
       2021-12-06 17:31:39 +08:00
    @lqs #19 我孤陋寡闻了,第一次见到点号写在行末的风格,感觉好奇怪
    branchWater
        35
    branchWater  
       2021-12-06 17:40:44 +08:00
    @weichengwu java 不也是这种风格吗?函数太长了也得换行
    Hanggi
        36
    Hanggi  
       2021-12-06 17:43:20 +08:00 via iPhone
    @branchWater
    他的意思是别的语言都是
    db.query()
    .find()

    但是 go 语言是
    db.query().
    find()

    对吧
    @weichengwu
    branchWater
        37
    branchWater  
       2021-12-06 17:52:20 +08:00
    @Hanggi java 的点号放到行首和行末也都行啊,奇怪的在什么地方
    cmdOptionKana
        38
    cmdOptionKana  
       2021-12-06 18:07:55 +08:00
    ent 还不好用?
    sciel
        40
    sciel  
       2021-12-09 13:33:42 +08:00
    用 goframe 吧

    ```
    func (m *roleMenu) List(page int, size int, id string, rid string, mid string) (int, gdb.List) {
    db := g.DB().Model(dao.RoleMenu.Table + " t1").
    LeftJoin(dao.Role.Table + " t2 on t1.rid = t2.id").
    LeftJoin(dao.Menu.Table + " t3 on t1.mid = t3.id")
    if id != "" {
    db = db.Where("t1.id", id)
    }
    if rid != "" {
    db = db.Where("t1.rid", rid)
    }
    if mid != "" {
    db = db.Where("t1.mid", mid)
    }
    count, _ := db.Count()
    db.Fields("t2.name r_name,t3.name m_name,t1.id id")
    all, _ := db.Limit(size).Offset((page - 1) * size).Order("t1.id desc").All()
    if all.IsEmpty() {
    return count, gdb.List{}
    }
    return count, all.List()
    }
    ```
    yiplee
        41
    yiplee  
       2022-04-28 00:40:38 +08:00
    @duanquanyong #31 sqlc 的确不错,但是只适合固定的 sql ,遇到需要 dynamic query 的场景就蛋疼了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4725 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 01:09 PVG 09:09 LAX 17:09 JFK 20:09
    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