回答

收藏

为什么 Go 中没有泛型?

技术问答 技术问答 293 人阅读 | 0 人回复 | 2023-09-12

有人知道为什么 Go 没有泛型/模板/模板/whatsInAName 的真正支持吗?所以有一个通用的map,但它是由编译器提供的, Go 程序员无法编写自己的实现。关于使 Go 为什么我可以使用泛型而不是创建新型,尽可能正交讨论?! N2 |# b1 |4 `$ [* T: O$ p9 l% N
特别是在函数编程方面, lambda 表达式,甚至封闭式,但对于缺乏泛型静态系统,我应该如何编写泛型高级函数,如filter(predicate,list)?OK,链表等可以interface{}完成牺牲类型安全。5 {- S' J0 A# C2 J0 z" z
由于对 SO / Google 的快速搜索没有揭示任何意见,似乎泛型(如果有的话)会作为事后的想法添加到 Go 中。我真的相信 Thompson 比 Java 人做得更好,但为什么要排除泛型呢?或者他们是计划好的,但还没有实施?
$ i% r  Y  ]0 G                                                               
6 \7 Y8 a; H9 j+ H" V    解决方案:                                                                0 N4 p" I7 L+ V$ p: S' p3 }
                                                                为什么 Go 没有泛型?
* C+ l: S' y! [/ u8 Y- r很可能会在某些情况下添加泛型。尽管我们知道一些程序员确实如此,但我们不认为他们有紧迫感。
0 ]4 S8 P; Q7 i; {3 L1 q9 q' u1 z  E; E泛型非常方便,但它们的成本是类型系统和运行的复杂性。虽然我们仍在思考,但我们还没有找到一种与复杂性成正比的设计。Go 的内置映射和切片,以及使用空接口构建容器(显式拆箱)的能力,意味着在很多情况下,如果不顺利,可以编写实施泛型支持的代码。/ K1 |/ p$ X/ g; u, j
这仍然是一个悬而未决的问题。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则