一尘不染

为什么Go中没有泛型?

go

免责声明:我现在只和Go玩了一天,所以我很有可能错过了很多。

有谁知道为什么Go中没有对泛型/模板/
whatsInAName的真正支持?因此,有一个通用的map,但这是由编译器提供的,而Go程序员无法编写自己的实现。关于如何使Go尽可能正交的所有讨论,为什么我可以使用通用类型而不创建新类型?

尤其是在函数式编程方面,有lambda甚至闭包,但是在缺少泛型的静态类型系统中,我该如何编写泛型高阶函数,如filter(predicate, list)?好的,可以通过interface{}牺牲类型安全性来完成链接列表等。

由于在SO /
Google上进行的快速搜索没有发现任何见解,因此,仿制药(如果有的话)似乎会在事后添加到Go中。我确实相信Thompson会比Java员工做得更好,但是为什么要排除泛型呢?还是他们已经计划并且尚未实施?


阅读 431

收藏
2020-07-02

共1个答案

一尘不染

您可以在这里找到以下答案:http :
//golang.org/doc/faq#generics

为什么Go没有泛型类型?

泛型可能会在某个时候添加。尽管我们了解一些程序员,但我们对他们并不感到紧迫。

泛型很方便,但是它们以类型系统和运行时的复杂性为代价。尽管我们一直在考虑,但我们还没有找到一种能使价值与复杂性成比例的设计。同时,Go的内置映射和切片,以及使用空接口构造容器的能力(带有显式拆箱),意味着在许多情况下,即使不那么顺利,也可以编写能够实现泛型的代码。

这仍然是一个未解决的问题。

2020-07-02