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

go 每一个数据库库使用起来都不太方便,有木有

  •  
  •   fxjson · Dec 29, 2022 via Android · 6136 views
    This topic created in 1413 days ago, the information mentioned may be changed or developed.

    感觉没有一个方便好用的库,每一个都有使用的痛点,gorm 查询返回 error 中记录不存在也会返回 error,导致每处的查询的 error 都要做是不是记录不存在的特殊判断;sqlx 原生 sql,比较喜欢,又没有单表增删改查的封装,也很通。不知道大家有木有这样的感觉,有没有推荐的库

    yuanxin
    yuanxin
    Dec 29, 2022❤️1
    1
    用过 ent ,可以看看能不能击中你的甜点
    licoycn
    licoycn
    Dec 29, 2022❤️1
    2
    基本上 gorm/sqlx 都会返回 NotFoundError ,需要你自己用 errors.is 来判断
    Bluelion
    Bluelion
    Dec 29, 2022
    3
    @licoycn 你用 find 不就好了,没有也不会 NotFoundError ,可以再看看文档
    to2false
    to2false
    Dec 29, 2022
    4
    可以尝试用泛型包一层判断,确实不咋好用

    ```go
    func ErrRecordNotFound[T any](err error) (*T, error) {
    if errors.Is(err, gorm.ErrRecordNotFound) {
    return new(T), nil
    }

    return nil, err
    }
    ```
    licoycn
    licoycn
    Dec 29, 2022
    5
    @Bluelion 好像是有,最近写 go 比较少忘记了都
    loneybw
    loneybw
    Dec 29, 2022
    6
    https://github.com/YLonely/sqldb
    自荐一下,写得不好多见谅
    darksword21
    darksword21
    Dec 29, 2022
    8
    个人觉得目前没有好用的,或者说自己稍微写一下也可以用的不错
    securityCoding
    securityCoding
    Dec 29, 2022❤️1
    9
    go 就是这个尿性,redis 也是这样 ErrNil
    devzhi
    devzhi
    Dec 29, 2022
    10
    @securityCoding 说的太对了
    EscYezi
    EscYezi
    Dec 29, 2022 via iPhone
    11
    fxjson
    fxjson
    OP
    Dec 29, 2022 via Android
    12
    @Bluelion 那这样又怎么区分出来实体没有查询出结果,引用对象又不是 nil,很恶心
    fxjson
    fxjson
    OP
    Dec 29, 2022 via Android
    13
    @securityCoding java 这方面就很好,实体找不到记录返回 null
    securityCoding
    securityCoding
    Dec 29, 2022 via Android
    14
    @fxjson java 也要判断 null ,go 只是习惯用 err 适配
    hopingtop
    hopingtop
    Dec 29, 2022
    15
    xorm.io/xorm 我印象中,是没有 空返回 error ,exists, error := .Get(&struct{}) 不存在 exists 是 false
    fxjson
    fxjson
    OP
    Dec 29, 2022 via Android
    16
    @securityCoding java 只需要根据是不是 null 就好了,但是 go 要判断 error 并且其他 error 和 recordnotexist error 处理逻辑还不一样
    rekulas
    rekulas
    Dec 30, 2022
    17
    gorm 的 NotFoundError 这点确实很脑残,很多人都诟病,把业务错误跟服务错误都搞混了作者还坚决不改,只能自己判断下

    gorm 不少地方使用起来都非常不方便,实在不明白为什么这么受人推崇 举个例子
    指定字段是 Select("col1", "col2")而不是 Select("col1,col2")就非常反直觉,跟其他各种库包括数据库习惯都不一样

    不过 gorm 的关联比其他库强大一点,可以灵活的实现各种关联模型

    除了 gorm ,我比较推荐 xorm ,用起来也很不错
    fxjson
    fxjson
    OP
    Dec 30, 2022 via Android
    18
    @rekulas gorm 不少地方使用起来都非常不方便,实在不明白为什么这么受人推崇,我也有此疑惑
    lesismal
    lesismal
    Jan 4, 2023
    19
    试试我这个呀:
    https://github.com/lesismal/sqlw

    我也喜欢原生,但是 sqlx 那些也并不好用,所以按照自己喜欢的方式撸了个

    旧帖:
    https://www.v2ex.com/t/861739

    也欢迎关注我的其他库:
    https://www.v2ex.com/t/794435#reply4
    lesismal
    lesismal
    Jan 4, 2023
    20
    其他那些功能太多了,涉及到的细节处理也多。
    我的库主要就是在 std 基础上封装了反射的部分,rawsql 能用的部分依旧能用,封装过的 sqlw.DB 提供了一点便捷的方法,让用户减轻结构体与传参、结果绑定部分的工作量,如果熟悉标准库的 rawsql ,不需要去学习其他那些库的基础只是、看下例子就懂了
    话说,我就是因为其他库太复杂了,学不懂 /动,所以一直使用 rawsql ,后来写了这个,省力多了
    fxjson
    fxjson
    OP
    Jan 4, 2023 via Android
    21
    @lesismal 看着是我喜欢的,回头试试
    RedisMasterNode
    RedisMasterNode
    Jan 13, 2023
    22
    @rekulas @jinzhu 试着直接 at 作者出来问下就知道了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4852 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 93ms · UTC 02:31 · PVG 10:31 · LAX 18:31 · JFK 21:31
    ♥ Do have faith in what you're doing.