Go语言支持模板或泛型吗?

9
我知道Go在传统的面向对象编程(OOP)中没有类,但是Go提供了接口的概念,可以让你做你想做的大多数OOP事情。
但是,Go是否允许创建类似于模板的类?例如,我正在阅读container/list包的源代码。它定义了列表及其关联的方法。但是,在所有方法中,列表中包含的值都是interface{}类型的--因此,可以是任何类型。有没有办法创建一个仅限于保存特定类型值的列表?例如int、string、Fruit等。

1
抱歉,Go语言不支持泛型或模板。尽管这些可能会出现在Go 2中。 - fuz
1
http://golang.org/doc/faq#generics - Paolo Moretti
1
还在golang组中找到了这个相关的帖子:https://groups.google.com/forum/#!topic/golang-nuts/6GF80NwGD6c/discussion - JnBrymn
2个回答

5
比gotgo更新的是一个基于代码生成的包叫做“gen”。

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

gen是一种试图将类似泛型的功能引入Go语言的尝试,灵感来源于C#的Linq、JavaScript的数组方法和underscore库。操作包括过滤、分组、排序等等。 模式是像在Linq中传递lambda或在JavaScript中传递函数一样传递函数。

3

基本上就是@FUZxxl说的那样。

泛型?目前还没有

模板?不完全是。有第三方项目像gotgo,旨在通过预处理文件来添加模板支持。然而,据我所知,gotgo已经不再更新了。

目前最好的选择是使用接口或反射。

如果你真的想使用反射,请注意reflect包提供了一种使用带有泛型(反射)内容的类型化函数变量的方法。你可以使用这个方法使用编译器可以检查的类型来解决基于反射的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接