当前位置: 首页 > 面试题库 >

为什么Go中没有泛型?

令狐俊风
2023-03-14
问题内容

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

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

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

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


问题答案:

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

为什么Go没有泛型类型?

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

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

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



 类似资料:
  • 问题内容: 最近,人们对Go提出了很多批评,因为它不支持泛型。这到底是什么意思呢?您如何向不熟悉这种动态类型语言(如Ruby)的人解释这一点? 问题答案: 在动态类型语言中,您不必关心列表是什么类型,而只是列表。但是,在静态类型的语言中,您确实在意列表的类型,因为类型是“ A的列表”,其中“ A”是某种类型。也就是说,a 与的类型不同。 因此,当您谈到泛型时,调用类型为列表中每个项目的某个函数时,

  • 问题内容: 我了解Go中数组和切片之间的区别。但是我不明白的是为什么完全拥有数组会有所帮助。数组类型定义指定长度和元素类型为什么有帮助?为什么我们使用的每个“数组”都不能切片? 问题答案: 数组不仅仅是固定长度,还有更多:它们是 可比较的 ,并且它们是 值 (不是引用或指针类型)。 在某些情况下,数组比切片有无数的优势,所有这些优点加在一起证明了数组的存在(以及切片)。让我们看看他们。(我什至不算

  • 问题内容: 我知道每次键入字符串文字时,字符串池中都会引用相同的String对象。 但是,为什么String API不包含,所以我可以使用引用? 至少,这将节省编译时间,因为编译器将知道引用现有的String,而不必检查是否已创建它以进行重用,对吗?我个人认为,字符串文字(尤其是很小的文字)在许多情况下是一种“代码异味”。 那么是否没有String.Empty背后的宏伟设计原因,还是语言创建者根本

  • 问题内容: 在Java中,有和接口。两者都属于Java的标准框架,并提供了一种访问元素的分类方法。 但是,据我了解没有。你可以用来对列表进行排序。 知道为什么要这样设计吗? 问题答案: 列表迭代器首先确保你以列表的内部顺序(也称为插入顺序)获取列表的元素。更具体地说,它是按照插入元素的顺序或操作列表的方式进行的。排序可以看作是对数据结构的一种操作,有几种方法可以对列表进行排序。 我将按照自己的见解

  • 问题内容: 为什么JavaFX中没有ObservableQueue?如果我们查看FXCollection的Java 9文档(只是看一下8的变化),我们会看到用于创建Observable集,列表和映射的静态助手方法。还有一些创建Observable float和integer数组的方法。但是,无法创建ObservableQueue。Java中的Queue接口具有许多有趣的实现,包括ArrayDequ

  • 问题内容: 我正在尝试做这样的事情: 不幸的是,即使在Java 9中也不存在。 为什么它被遗漏了? 建议的解决方法是什么? 问题答案: 为什么它被遗漏了? 该API提供了可重用的构建块。这里的相关积木是,,。通过这些,您可以实现所需的功能:将流内映射到对象,然后获得平面图。提供构建基块的排列是不切实际的,并且很难扩展。 建议的解决方法是什么? 如前所述,使用可用的构建基块(+ ):