有人知道为什么 Go 中没有对泛型/模板/whatsInAName 的真正支持吗?所以有一个通用的map,但它是由编译器提供的,而 Go 程序员不能编写自己的实现。所有关于使 Go 尽可能正交的讨论,为什么我可以使用泛型类型而不是创建新类型?
map
尤其是在函数式编程方面,有 lambda 表达式,甚至闭包,但是对于缺少泛型的静态类型系统,我该如何编写泛型高阶函数,例如filter(predicate, list)?OK,链表等可以interface{}牺牲类型安全来完成。
filter(predicate, list)
interface{}
由于对 SO / Google 的快速搜索没有揭示任何见解,看起来泛型(如果有的话)将作为事后的想法添加到 Go 中。我确实相信 Thompson 比 Java 人做得更好,但为什么要把泛型排除在外呢?或者他们是计划好的,只是还没有实施?
为什么 Go 没有泛型类型?
在某些时候很可能会添加泛型。我们不觉得他们有紧迫感,尽管我们知道有些程序员确实如此。
泛型很方便,但它们的代价是类型系统和运行时的复杂性。我们还没有找到一种设计,其价值与复杂性成正比,尽管我们仍在继续思考。同时,Go 的内置映射和切片,以及使用空接口构建容器(显式拆箱)的能力意味着在许多情况下,如果不太顺利的话,可以编写执行泛型支持的代码。
这仍然是一个悬而未决的问题。