34 thoughts on “golang 为什么不内建 map / reduce / filter / for

  1. 那三个老头定的基调,go 的设计思想就决定了不会搞这么多语法糖,提 issue 也没用,要么自己写,要么第三方,话说这玩意写起来也简单,官方不实现也挺好的,省的学了

  2. Go 的设计者,最开始就是想搞个比 C 更好用的语言而已,你想想 C 是多么简单的语言。并且 Go 的设计者一开始压根就没想把 Go 开源出去,只想自己内部用用。并且主要目的是用来写“网络基础设施”

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

    所以有些问题就属于娘胎来的毛病,Go 这个语言在原始设计的时候走的就是极简主义。

  3. 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 的痛。。

    权当供大家一笑

  4. @index90 好的特性为什么不能借鉴? Java 的 Stream API 也是 Java 8 才加入的。。。

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

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

  5. @est 高效语言就不能有高级特性了吗,出门左转 Rust 了解一下,按你这说法所谓的“高效”场景,用汇编就好了

  6. go 基本已经确定了明年会增加对泛型的支持啊,具体是 2 月还是 8 月不确定,实现方法看起来也还不错。

  7. 函数式的算子比写 for 方便多了,流式简短直观,scala 程序员试了下 go,这都没有确实有点不能接受

  8. @QBugHunter
    这怎么是反话? C 语言在语言层面上怎么不简单? C 语言之父专门描述过它当初设计 C 语言的想法,就专门提到它设计 C 语言的核心思想就来源 Unix,保持简单是核心思想。C 程序设计语言那本书才多厚? C 语言本身几乎没有任何花里胡哨的东西,纯过程语言,语法糖都没有,怎么不简单?

    C 语言在语言层面上是非常简单的,复杂的是围绕 C 语言的其它知识,尤其是计算机体系的基础。这导致你要用 C 语言写出可用的程序,不光是了解 C 语言的知识就行的。但是 C 语言本身特性,就是简单

  9. @lululau 想跟我抬杠,再练几年啊。我泛指所有高级语言了?你让我了解 Rust 我就了解?汇编就一定高效了?你谁啊你。

  10. @index90 #18
    “为什么总是拿 java 或其他语言的东西往 go 上套,那你又为了什么转 go,赶时髦吗?”
    这个“东西”过去是泛型,现在是便利的方法,以后还会是其他东西。

发表评论

电子邮件地址不会被公开。 必填项已用*标注