golang 为什么不内建 map / reduce / filter / for_each / find / any 这样的函数/方法?

2020-10-30 10:40:24 +08:00
 lululau

既然都支持函数 /方法作为“对象”了,好歹放到标准库里也行啊,为什么只能找第三方库?是什么设计思想导致了这个状况 ?

5935 次点击
所在节点    Go 编程语言
36 条回复
banishee
2020-10-30 10:45:13 +08:00
golang 没有各种数据结构,有点小烦
Mitt
2020-10-30 10:45:37 +08:00
因为没有泛型
SuperMild
2020-10-30 10:55:19 +08:00
二楼正解,没范型影响很大
coderxy
2020-10-30 11:00:08 +08:00
你可以用 sort.Search
xkeyideal
2020-10-30 11:04:29 +08:00
那三个老头定的基调,go 的设计思想就决定了不会搞这么多语法糖,提 issue 也没用,要么自己写,要么第三方,话说这玩意写起来也简单,官方不实现也挺好的,省的学了
stevenbipt
2020-10-30 11:16:03 +08:00
没有范型,而且就算你说了官方也大概率不会听
abcbuzhiming
2020-10-30 11:49:03 +08:00
Go 的设计者,最开始就是想搞个比 C 更好用的语言而已,你想想 C 是多么简单的语言。并且 Go 的设计者一开始压根就没想把 Go 开源出去,只想自己内部用用。并且主要目的是用来写“网络基础设施”

但是后来没想到这个语言公开出来后火了,大量的人用来写 web 应用,应用层和基础设施侧重点就有区别,基础设施你没有泛型,无所谓,业务应用没有泛型就很别扭。所以 go 的泛型在社区不断的呼声中“不情不愿”的加上去的,至少有相当长的一段时间,Go 的官方是明确说过不加泛型这个话的。

所以有些问题就属于娘胎来的毛病,Go 这个语言在原始设计的时候走的就是极简主义。
dbskcnc
2020-10-30 11:50:36 +08:00
这个真的是范型的专长,包括 C++以前也是一样,有了范型,stl 就横空出世了
还是期待 go 1.17 吧
cheng6563
2020-10-30 12:03:14 +08:00
go 只是 c 的升级版,不要把他当成多高层的语言
ericgui
2020-10-30 12:05:20 +08:00
@dbskcnc 不是说泛型要 go2 才有吗
lxml
2020-10-30 12:07:42 +08:00
@ericgui go 2 不是指的版本号 2.0,只是一个计划
lithbitren
2020-10-30 12:25:12 +08:00
主要是没泛型,迭代器里面很直接难套函数
gowk
2020-10-30 13:11:38 +08:00
https://github.com/robpike/filter

I wanted to see how hard it was to implement this sort of thing in Go, with as nice an API as I could manage. It wasn't hard.

Having written it a couple of years ago, I haven't had occasion to use it once. Instead, I just use "for" loops.

You shouldn't use it either.

看了 Rob Pike 上面的话,我忍不住笑了,大神的意思是:
“map / reduce / filter 这些玩意真的有那么好吗,好吧,我试着写一个库来实现这些东西,Go 实现起来就是小菜一碟。
但是,我实现了又怎么了,这些代码一动不动的躺在这里好几年了,我他妈根本没有场合去使用它!我平时用用 for 就行了,我证明了这些东西没用,所以你们也不要用了。”

可。。可是 Pike 大神,你平时写的都是 infrastructure,并不理解我们写业务写 CURD 的痛。。

权当供大家一笑
QBugHunter
2020-10-30 13:29:53 +08:00
@abcbuzhiming
你想想 C 是多么简单的语言

请问你这是反话嘛?
icyalala
2020-10-30 13:38:27 +08:00
@QBugHunter C 确实比较简单,从语言的复杂性上来说。。
azcvcza
2020-10-30 14:19:45 +08:00
写习惯 C 的都是无脑写 for 的,刚开始写 js 我也不喜欢写 forEach,reduce, map, filter, find,some,
chogath
2020-10-30 14:46:46 +08:00
底层 go,业务层 rpc to node.js, 有啥好纠结的,就非得一把梭?
index90
2020-10-30 15:16:00 +08:00
为什么总是拿 java 或其他语言的东西往 go 上套,那你又为了什么转 go,赶时髦吗?
est
2020-10-30 15:25:47 +08:00
go 是写给机器高效执行的,不是写给人看的。
lululau
2020-10-30 15:29:08 +08:00
@index90 好的特性为什么不能借鉴? Java 的 Stream API 也是 Java 8 才加入的。。。

楼上有人都说了,未来 go 应该会加入对范型的支持,那离支持这种所谓“函数式编程”也不会太远,等着被打脸吧。。。

不过我觉得就你这种心态,可能等不到被打脸,就在程序员这行干不下去了

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

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

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

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

© 2021 V2EX