最近,人们对Go提出了很多批评,因为它不支持泛型。这到底是什么意思呢?您如何向不熟悉这种动态类型语言(如Ruby)的人解释这一点?
在动态类型语言中,您不必关心列表是什么类型,而只是列表。但是,在静态类型的语言中,您确实在意列表的类型,因为类型是“ A的列表”,其中“ A”是某种类型。也就是说,a list A与的类型不同list B。
list A
list B
因此,当您谈到泛型时,调用类型A -> B为列表中每个项目的某个函数时,foreach意味着该列表必须为list A。但是…如果使用泛型,则不必声明是什么A,只需稍后再填写即可。因此,您可以建立合同,据此给定a list C和函数A -> B,A === C以便对其进行编译。这大大减少了样板。
A -> B
foreach
A
list C
A === C
在Go中,由于缺少泛型并且无法声明这种类型协定,因此您必须编写一个对int列表,double列表,string列表等操作的函数。您不能仅定义以“通用”方式进行操作。