The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
KevinBlandy

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

  •  
  •   KevinBlandy · Dec 5, 2021 · 12844 views
    This topic created in 1794 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

    对吧
    @weichengwu
    branchWater
    branchWater
    Dec 6, 2021
    37
    @Hanggi java 的点号放到行首和行末也都行啊,奇怪的在什么地方
    QingXuJiaZhi
    QingXuJiaZhi
    Dec 6, 2021
    38
    ent 还不好用?
    apple2026
    apple2026
    Dec 9, 2021
    40
    用 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
    yiplee
    Apr 28, 2022
    41
    @duanquanyong #31 sqlc 的确不错,但是只适合固定的 sql ,遇到需要 dynamic query 的场景就蛋疼了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2722 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 117ms · UTC 00:26 · PVG 08:26 · LAX 16:26 · JFK 19:26
    ♥ Do have faith in what you're doing.