Golang Go语言中为什么不内建map/reduce/filter/for_each/find/any这样的函数/方法?
Golang Go语言中为什么不内建map/reduce/filter/for_each/find/any这样的函数/方法?
既然都支持函数 /方法作为“对象”了,好歹放到标准库里也行啊,为什么只能找第三方库?是什么设计思想导致了这个状况 ?
golang 没有各种数据结构,有点小烦
更多关于Golang Go语言中为什么不内建map/reduce/filter/for_each/find/any这样的函数/方法?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
因为没有泛型
二楼正解,没范型影响很大
你可以用 sort.Search
那三个老头定的基调,go 的设计思想就决定了不会搞这么多语法糖,提 issue 也没用,要么自己写,要么第三方,话说这玩意写起来也简单,官方不实现也挺好的,省的学了
没有范型,而且就算你说了官方也大概率不会听
Go 的设计者,最开始就是想搞个比 C 更好用的语言而已,你想想 C 是多么简单的语言。并且 Go 的设计者一开始压根就没想把 Go 开源出去,只想自己内部用用。并且主要目的是用来写“网络基础设施”
但是后来没想到这个语言公开出来后火了,大量的人用来写 web 应用,应用层和基础设施侧重点就有区别,基础设施你没有泛型,无所谓,业务应用没有泛型就很别扭。所以 go 的泛型在社区不断的呼声中“不情不愿”的加上去的,至少有相当长的一段时间,Go 的官方是明确说过不加泛型这个话的。
所以有些问题就属于娘胎来的毛病,Go 这个语言在原始设计的时候走的就是极简主义。
这个真的是范型的专长,包括 C++以前也是一样,有了范型,stl 就横空出世了
还是期待 go 1.17 吧
go 只是 c 的升级版,不要把他当成多高层的语言
不是说泛型要 go2 才有吗
go 2 不是指的版本号 2.0,只是一个计划
主要是没泛型,迭代器里面很直接难套函数
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 的痛。。
权当供大家一笑
你想想 C 是多么简单的语言
请问你这是反话嘛?
C 确实比较简单,从语言的复杂性上来说。。
写习惯 C 的都是无脑写 for 的,刚开始写 js 我也不喜欢写 forEach,reduce, map, filter, find,some,
底层 go,业务层 rpc to node.js, 有啥好纠结的,就非得一把梭?
为什么总是拿 java 或其他语言的东西往 go 上套,那你又为了什么转 go,赶时髦吗?
go 是写给机器高效执行的,不是写给人看的。
好的特性为什么不能借鉴? Java 的 Stream API 也是 Java 8 才加入的。。。
楼上有人都说了,未来 go 应该会加入对范型的支持,那离支持这种所谓“函数式编程”也不会太远,等着被打脸吧。。。
不过我觉得就你这种心态,可能等不到被打脸,就在程序员这行干不下去了
高效语言就不能有高级特性了吗,出门左转 Rust 了解一下,按你这说法所谓的“高效”场景,用汇编就好了
go 基本已经确定了明年会增加对泛型的支持啊,具体是 2 月还是 8 月不确定,实现方法看起来也还不错。
函数式的算子比写 for 方便多了,流式简短直观,scala 程序员试了下 go,这都没有确实有点不能接受
要说特性,C#最多,然而。。。。
这怎么是反话? C 语言在语言层面上怎么不简单? C 语言之父专门描述过它当初设计 C 语言的想法,就专门提到它设计 C 语言的核心思想就来源 Unix,保持简单是核心思想。C 程序设计语言那本书才多厚? C 语言本身几乎没有任何花里胡哨的东西,纯过程语言,语法糖都没有,怎么不简单?
C 语言在语言层面上是非常简单的,复杂的是围绕 C 语言的其它知识,尤其是计算机体系的基础。这导致你要用 C 语言写出可用的程序,不光是了解 C 语言的知识就行的。但是 C 语言本身特性,就是简单
是下层简单,不是用起来简单,worse is better 的那个 better
想跟我抬杠,再练几年啊。我泛指所有高级语言了?你让我了解 Rust 我就了解?汇编就一定高效了?你谁啊你。
C is simple, but hard to use.
Rust is complex, but easy to use.
但是 golang 不只是用来写中间件,写 web 没有泛型?
可能过早优化是万恶之源吧 [doge]
当用过一次 map 后,就会不再想用 for 了
说得好像第三方库也能写得出来标准的 map reduce 一样…
楼主的意思我理解了,但是我表达不出来,阿巴阿巴阿巴
#18
“为什么总是拿 java 或其他语言的东西往 go 上套,那你又为了什么转 go,赶时髦吗?”
这个“东西”过去是泛型,现在是便利的方法,以后还会是其他东西。
确实
非杠 但如果要追求性能的话我为什么要用 go😂
在Golang(Go语言)的设计哲学中,语言的简洁性和明确性被视为核心价值。Go语言的设计者倾向于提供一套基础而强大的工具,让开发者能够根据需要构建出复杂的逻辑,而不是直接在标准库中提供过多的高级函数或方法。
对于map/reduce/filter/for_each/find/any等函数/方法,它们在函数式编程中非常常见,但在Go的设计中,更强调通过显式的循环和条件语句来控制程序的流程。这样的设计有助于保持代码的清晰和易读,同时也避免了引入可能增加复杂性和学习曲线的函数式编程范式。
此外,Go语言的设计者鼓励开发者通过组合基础功能来创建更复杂的功能。例如,通过简单的for循环和if条件语句,开发者可以轻松地实现map、filter、reduce等操作。这种方式不仅使代码更加直观,而且有助于开发者理解和维护代码。
当然,随着Go语言社区的发展,一些第三方库已经提供了这些高级函数/方法的实现,开发者可以根据需要引入这些库来简化自己的工作。但即使如此,Go语言的核心设计仍然坚持简洁和明确的原则,鼓励开发者通过基础工具来构建复杂的逻辑。
总的来说,Go语言不内建这些函数/方法,是出于对其设计哲学的坚持和对开发者灵活性的尊重。