go 每一个数据库库使用起来都不太方便,有木有 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
fxjson
V2EX    Go 编程语言

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

a href="Javascript:" Onclick="upVoteTopic(905265);" class="vote">
  •  
  •   fxjson 2022-12-29 08:20:04 +08:00 via Android 5171 次点击
    这是一个创建于 1017 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    yuanxin1999
        1
    yuanxin1999  
       2022-12-29 08:37:50 +08:00   1
    用过 ent ,可以看看能不能击中你的甜点
    licoycn
        2
    licoycn  
       2022-12-29 09:08:46 +08:00   1
    基本上 gorm/sqlx 都会返回 NotFoundError ,需要你自己用 errors.is 来判断
    Bluelion
        3
    Bluelion  
       2022-12-29 09:49:25 +08:00
    @licoycn 你用 find 不就好了,没有也不会 NotFoundError ,可以再看看文档
    to2false
        4
    to2false  
       2022-12-29 09:57:28 +08:00
    可以尝试用泛型包一层判断,确实不咋好用

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

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

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

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

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

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

    旧帖:
    t/861739

    也欢迎关注我的其他库:
    t/794435#reply4
    lesismal
        20
    lesismal  
       2023-01-04 16:54:40 +08:00
    其他那些功能太多了,涉及到的细节处理也多。
    我的库主要就是在 std 基础上封装了反射的部分,rawsql 能用的部分依旧能用,封装过的 sqlw.DB 提供了一点便捷的方法,让用户减轻结构体与传参、结果绑定部分的工作量,如果熟悉标准库的 rawsql ,不需要去学习其他那些库的基础只是、看下例子就懂了
    话说,我就是因为其他库太复杂了,学不懂 /动,所以一直使用 rawsql ,后来写了这个,省力多了
    fxjson
        21
    fxjson  
    OP
       2023-01-04 20:32:30 +08:00 via Android
    @lesismal 看着是我喜欢的,回头试试
    RedisMasterNode
        22
    RedisMasterNode  
       2023-01-13 10:05:43 +08:00
    @rekulas @jinzhu 试着直接 at 作者出来问下就知道了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2686 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 41ms UTC 13:49 PVG 21:49 LAX 06:49 JFK 09:49
    Do have faith in what you're doing.
    ubao 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