【发布时间】:2011-04-24 03:34:22
【问题描述】:
免责声明:我现在只玩了一天围棋,所以很有可能我错过了很多。
有人知道为什么 Go 中没有对泛型/模板/whatsInAName 的真正支持吗?所以有一个通用的map,但这是由编译器提供的,而 Go 程序员不能编写自己的实现。既然大家都在谈论让 Go 尽可能正交,为什么我可以使用泛型类型但不能创建新类型?
特别是在函数式编程方面,有 lambda,甚至是闭包,但是对于缺少泛型的静态类型系统,我该如何编写像 filter(predicate, list) 这样的泛型高阶函数?好的,链表之类的可以用interface{}牺牲类型安全来完成。
由于在 SO / Google 上的快速搜索没有发现任何见解,看起来泛型(如果有的话)将作为事后的想法添加到 Go 中。我确实相信 Thompson 比 Java 的人做得更好,但为什么要把泛型排除在外呢?还是他们已经计划好但尚未实施?
【问题讨论】:
-
我认为值得指出的是:使用 interface{} 不会牺牲类型安全。它是一种类型,可以断言(而不是强制转换)为其他类型,但这些断言仍会调用运行时检查以维护类型安全。
-
interface{}牺牲了 static 类型的安全性。然而,当提到 Scheme 是下一段时,这是一个有点奇怪的抱怨,因为 Scheme 通常没有静态类型检查。 -
@poolie:我关心的是在一种语言中坚持一个范式。要么我使用的是静态类型安全 XOR,要么没有。
-
所以为了让您了解最新情况 > 一个实现泛型类型的语言提案已被接受 > 包含在该语言中。如果一切顺利,它将 > 在 Go 1.18 版本中可用。这是proposal。
标签: generics functional-programming go