Golang Go语言中每一个数据库库使用起来都不太方便,有木有

发布于 1周前 作者 yibo5220 来自 Go语言

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


Golang Go语言中每一个数据库库使用起来都不太方便,有木有
23 回复

用过 ent ,可以看看能不能击中你的甜点

更多关于Golang Go语言中每一个数据库库使用起来都不太方便,有木有的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


基本上 gorm/sqlx 都会返回 NotFoundError ,需要你自己用 errors.is 来判断

你用 find 不就好了,没有也不会 NotFoundError ,可以再看看文档

可以尝试用泛型包一层判断,确实不咋好用

go<br>func ErrRecordNotFound[T any](err error) (*T, error) {<br> if <a target="_blank" href="http://errors.Is" rel="nofollow noopener">errors.Is</a>(err, gorm.ErrRecordNotFound) {<br> return new(T), nil<br> }<br><br> return nil, err<br>}<br>

好像是有,最近写 go 比较少忘记了都

https://github.com/YLonely/sqldb
自荐一下,写得不好多见谅

个人觉得目前没有好用的,或者说自己稍微写一下也可以用的不错

go 就是这个尿性,redis 也是这样 ErrNil

说的太对了

那这样又怎么区分出来实体没有查询出结果,引用对象又不是 nil,很恶心

java 这方面就很好,实体找不到记录返回 null

java 也要判断 null ,go 只是习惯用 err 适配

xorm.io/xorm 我印象中,是没有 空返回 error ,exists, error := .Get(&struct{}) 不存在 exists 是 false

java 只需要根据是不是 null 就好了,但是 go 要判断 error 并且其他 error 和 recordnotexist error 处理逻辑还不一样

gorm 的 NotFoundError 这点确实很脑残,很多人都诟病,把业务错误跟服务错误都搞混了作者还坚决不改,只能自己判断下

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

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

除了 gorm ,我比较推荐 xorm ,用起来也很不错

gorm 不少地方使用起来都非常不方便,实在不明白为什么这么受人推崇,我也有此疑惑

试试我这个呀:
https://github.com/lesismal/sqlw

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

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

也欢迎关注我的其他库:
https://www.v2ex.com/t/794435#reply4

其他那些功能太多了,涉及到的细节处理也多。
我的库主要就是在 std 基础上封装了反射的部分,rawsql 能用的部分依旧能用,封装过的 sqlw.DB 提供了一点便捷的方法,让用户减轻结构体与传参、结果绑定部分的工作量,如果熟悉标准库的 rawsql ,不需要去学习其他那些库的基础只是、看下例子就懂了
话说,我就是因为其他库太复杂了,学不懂 /动,所以一直使用 rawsql ,后来写了这个,省力多了

看着是我喜欢的,回头试试

试着直接 at 作者出来问下就知道了

在Go语言中,虽然每种数据库库(如MySQL、PostgreSQL、SQLite等)的使用方式和API设计可能有所不同,但这并不意味着它们使用起来都不方便。实际上,Go语言的数据库支持相当强大且灵活,关键在于选择适合的库并理解其使用方法。

对于MySQL,你可以使用go-sql-driver/mysql库,它提供了一个简洁且高效的接口。对于PostgreSQL,lib/pq是一个常用的选择,它同样提供了丰富的功能和良好的性能。对于SQLite,modernc.org/sqlitemattn/go-sqlite3都是不错的选择。

如果你觉得使用这些库不方便,可能是因为你还没有熟悉它们的API和最佳实践。建议多查阅官方文档和社区资源,了解如何正确地配置连接、执行查询和处理结果。

此外,Go语言的database/sql标准库提供了一个通用的数据库接口,你可以通过实现这个接口来适配不同的数据库。这不仅可以减少代码重复,还可以提高代码的可维护性和可扩展性。

总的来说,Go语言在数据库支持方面是相当强大的。如果你觉得使用起来不方便,不妨多做一些研究和尝试,相信你会找到适合自己的解决方案。同时,也可以考虑加入Go语言的社区,与其他开发者交流经验和心得,共同进步。

回到顶部