Go支持模板或泛型吗?

时间:2013-12-15 20:58:02

标签: oop generics go

我知道Go没有传统OOP意义上的类,但是Go确实提供了一个接口概念,允许你做大部分你想要做的OOP事情。

但是,Go是否允许创建模板化类?例如,我正在阅读容器/列表包的源代码。它定义了一个列表和列表的相关方法。但是在所有方法中,列表中包含的值都是interface{}类型 - 因此,任何类型。有没有办法创建一个限制为只保存特定类型值的列表? int,string,Fruit ......等等。

2 个答案:

答案 0 :(得分:5)

比getgo更新,有一个名为“gen”的基于代码生成的软件包。

http://clipperhouse.github.io/gen/

  

gen试图为Go带来一些类似泛型的功能,灵感来自C#的Linq,JavaScript的Array方法和下划线库。操作包括过滤,分组,排序等。

     

模式是传递func,就像在Linq中传递lambdas或在JavaScript中传递函数一样。

答案 1 :(得分:3)

基本上是@FUZxxl所说的。

泛型? Not at this time

模板?不完全的。有一些第三方项目,如gotgo,旨在添加模板 通过预处理文件来支持。但是,据我所知,已经死了。

您最好的选择是暂时使用界面或反射。

如果您确实想要使用反射,请注意reflect包提供了fill a typed function variable with generic (reflected) content的方式。您可以使用它来使用编译器类型 可以查看基于反射的解决方案。