看到 Go 与 MongoDB 的交互方式,我想放弃 Go 了

2021-10-24 11:48:43 +08:00
 balabalaguguji

之前习惯了 python/js 这种语法,感觉很自然很方便。

今天看了下 MongoDB 官方的 Go 接口,哎呀,那交互方式,真的是痛苦。

例如查询用户为 1 的用户:{userid: 1},在 Go 里面你还得包裹为 bson.D{{"userid", 1}}

返回的结果是一个索引,要 Decode 下,Docode 还需要传递一个结构体过去。

还得传递一个 context (还没看为啥要这么做,其他语言不用)

感觉一点也不方便,代码很多不美观不优雅,习惯了 js/python 这种比较简单直观的语法,难以接受呀。

感觉 Google 最近出的东西,语法都那么特立独行的,还有一个是死亡嵌套 Flutter ,嵌套到怀疑人生。

官方教程: https://www.mongodb.com/blog/post/mongodb-go-driver-tutorial

filter := bson.D{{"name", "Ash"}}

update := bson.D{
    {"$inc", bson.D{
        {"age", 1},
    }},
}

updateResult, err := collection.UpdateOne(context.TODO(), filter, update)
if err != nil {
    log.Fatal(err)
}

fmt.Printf("Matched %v documents and updated %v documents.\n", updateResult.MatchedCount, updateResult.ModifiedCount)
14597 次点击
所在节点    Go 编程语言
99 条回复
qq1340691923
2021-10-25 15:44:09 +08:00
我刚开始也是用的官方库,怎么写怎么繁琐,后来换成了 https://github.com/go-mgo/mgo ,瞬间开发效率都高了好多
gowk
2021-10-25 15:59:14 +08:00
@lancelock 目前业务密集型应用就别用 Go 了,给自己找麻烦,好好用 Java 挺香。但是我挺期待 Go 泛型的大规模应用,再加上完备的库和生态,让写业务也成为一种乐趣。
qq1340691923
2021-10-25 16:07:54 +08:00
golang 官方的 es 库用起来也没有第三方的库清爽
securityCoding
2021-10-25 16:10:27 +08:00
@gowk 没泛型写业务是真的操蛋
ila
2021-10-25 16:21:24 +08:00
@lancelock 你是说哪个点不快?可以举个例子了。
solos
2021-10-25 17:48:18 +08:00
你该放弃的是 mongodb
holulu
2021-10-25 18:14:21 +08:00
@x940727 现在微服务的优势就可以让你结合不同工具的优势来打造复杂的项目,减少要在同一个项目中使用统一的技术框架的麻烦。
x940727
2021-10-25 18:21:34 +08:00
@holulu 微服务的副作用是非常大的,上分布式系统的前提就是能不上分布式就别上,如果我就是业务复杂但是用户量不大呢?软件工作没有银弹,微服务也不是架构银弹。
xiaotianhu
2021-10-25 19:06:22 +08:00
@x940727 不敢苟同,语言确实是工具,但是决定一个语言生命力的,语法不是关键性因素,语言附带的生态才是关键性因素。如果你换一个语言,就等于生态全部都需要重新去了解熟悉,这个沉没成本远比你想的要高的多,基本上没有老手会选择放弃自己钻研五六年的语言去换一个全新的语言,最多换一个相关性比较高的语言。我认为张嘴语言就是工具可以随便换的,不是超级大神,就是菜鸟……

大神都是不用干活搞科研那种,研究点编译原理 runtime 什么的,才不要解析神马 JSON ,太 low
x940727
2021-10-25 19:13:18 +08:00
@xiaotianhu 那也不一定啊,就拿软件领域来说,搞科研的很多东西落不了地,你看 MIT 的莫里斯教授对于 Hadoop 就赞扬有加,因为这玩意是落了地的,验证了可行性并且大规模使用的。大部分理工科人还是不喜欢嘴炮侠的吧。
Z1on
2021-10-25 20:25:19 +08:00
@XTTX mongo.Connect()在程序启动的时候,放在 init 里面调用一次就好了,把 client 声明成全局变量。client 是并发安全的,会自己维护一个链接池。
https://github.com/mongodb/mongo-go-driver/blob/v1.7.3/mongo/client.go#L51
gengchun
2021-10-25 23:38:47 +08:00
@lancelock 这个是工业化,和权威没有关系。Golang 的目标和之前 Java 一样,就是希望高中毕业培训两个月,给个最低工资就能上手写代码。

真能单枪匹马完成项目,想用 lisp 都没有人管。
holulu
2021-10-26 07:07:54 +08:00
@x940727 不是说微服务就能解决所有问题,只是提供一个思路或方向。任何技术都有副作用,大不大看能否承受,重要的是权衡利弊。软件工程就是风险管理,永远不可能为要实现的业务找到最合适的技术方案,只有在不同方案之间妥协,寻找一个适应当时业务发展的平衡点。了解的技术越多,离找到合适的平衡点就越近。
tiedan
2021-10-26 09:13:42 +08:00
可能我用习惯了,我觉得 go 下操作 mongo 挺方便的😂
wildlife
2021-10-27 09:47:20 +08:00
balabalaguguji
2021-10-27 10:39:37 +08:00
@wildlife #95 瞬间感觉 mongodb 如此复杂
8355
2021-10-27 14:39:31 +08:00
用 php 啊 一把嗦 不要考虑这些 拥抱世界上最好的语言 狗头
darknoll
2021-10-28 17:06:29 +08:00
不能拿静态语言和动态语言比,你要觉得 go 麻烦,那 C++看都不能看了啊
maotao456
2021-11-12 16:41:40 +08:00
@8355 这可不太好,在 php 里面用 mongodb 很容易被数据类型搞死。123, "123"

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

https://tanronggui.xyz/t/810126

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

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

© 2021 V2EX