为什么 Go 中的 ORM 框架使用起来感觉比较怪异

2018-07-14 11:39:48 +08:00
 cc959798

最近研究 Go,做业务系统必然要用到 ORM,毕竟数据库操作太频繁了鞋 SQL 效率太低了

之前用过很多 ORM,比如 JAVA 中的 hibernate,Python 中的 sqlalchemy,PHP 中的 Yii,感觉 ORM 其实都是大同小异 上面的几乎也是类似的使用方式 但是到了 Go,这里感觉画风骤变,了解了 gorm 和 xorm (这两个其实挺像的),里面不在像之前的通过 model 或者 db 进行 find 查询只需要传入条件返回一个查到的对象,2️⃣必须先要 new 一个对象,然后通过指针传入进去,框架也是感觉比较简单的

15185 次点击
所在节点    Go 编程语言
46 条回复
ZSeptember
2018-07-14 12:03:48 +08:00
你仔细想想,你不 new 一个给它,它怎么返回一个你要的对象给你
gowk
2018-07-14 12:07:03 +08:00
ORM 倾向于让系统变得复杂,直接用 sqlx 就好了
Cbdy
2018-07-14 12:14:49 +08:00
直接写 SQL,然后 bind 参数,这样是坠吼的
kunluanbudang
2018-07-14 12:21:11 +08:00
Go 粉丝 /布道者, 倾向于批判楼主

( Go , 整体还不错, 用起来也非常爽,

但是 Go 粉丝, 一般喜欢无脑吹捧一些陋习, 我比较反感这个 )
Muninn
2018-07-14 12:28:55 +08:00
go 也可以给你返回给 map[string]interface{},然而不好用啊。。。

你 new 一个给你智能的填进去反而后边省事了,预定义好,不用你取到后再处理了。
monsterxx03
2018-07-14 12:32:33 +08:00
go 的 orm 不好用,试试 squirrel + sqlx
guoziyan
2018-07-14 14:02:46 +08:00
所有的 orm 没有一个直观好用的(所有语言)
janxin
2018-07-14 14:26:23 +08:00
实际上因为没用过 c++/rust 的 orm 吧,go 没有那种贴近动态语言的运行时功能,只能做到这种地步了
lhx2008
2018-07-14 14:32:18 +08:00
@guoziyan springboot 的 springjpa+heibernate 用过了吗
q397064399
2018-07-14 14:46:09 +08:00
@guoziyan #7 springdata jpa 了解一下
cc959798
2018-07-14 15:09:32 +08:00
@ZSeptember 如果 model 是结构体的话,直接返回一个结构体 变量或者自己内部 new 一个不就可以了
cc959798
2018-07-14 15:10:44 +08:00
@janxin 都没见过 C++的 ORM
ZSeptember
2018-07-14 15:15:35 +08:00
@cc959798 你 new 一个看看,想想
boyhailong
2018-07-14 15:18:46 +08:00
那可以自己造轮子,用脚本生成代码吧 像 protobuf 那样,虽然很麻烦,加载、查询、保存都可以自己定制。。。。
公司项目 C++就是那样,不然要麻烦哭
qsnow6
2018-07-14 15:22:06 +08:00
django orm 了解一下
ZSeptember
2018-07-14 15:25:44 +08:00
@janxin rust 还可以用 derive,还好
xiaqi
2018-07-14 15:29:35 +08:00
我怎么感觉写 sql 效率还更高呢?
orm 一些复杂的操作是操作不了的,写 sql,我甚至可以放个存储过程进去,经管这个有时候不推荐。而且写 sql 通用,换了语言也不是很担心,相反,orm 换了语言,有些差别可就大了,你得再去学一遍 orm。
cc959798
2018-07-14 15:44:46 +08:00
@Muninn 为什么不直接返回一个 model,填充好的
luob
2018-07-14 16:03:59 +08:00
gorm 作者的意思是为了保持 api 一致
所有的操作都返回 db 实例,就可以愉快地链式调用,查询结果这种东西只能委屈一下先 new 一个,然后传进去塞值
dodo2012
2018-07-14 16:39:15 +08:00
@ZSeptember derive 用了下,感觉挺难用啊,难道是姿势不对

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/470825

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX