我正在尝试一点go programming language。
我对Go的简单性感到兴奋,但在玩完之后我遇到了一些麻烦。
1。我知道 Go 不支持泛型和继承。 有没有办法实现通用列表?
我在考虑使用:
type Any interface { }
但是如何检查值是否为NULL 我正在寻找一些与C相当的实现
struct List {
List* tail;
void* head;
}
或使用代数数据类型:
data List a = Nil | Cons a (List a)
2。更高级的要求是为具有特定类型字段的对象制作一些容器?
例如,在 Scala编程语言中,我可以键入:
val List[Animal { type SuitableFood = Grass} ]
获取List
Animals
SuitableFood
,其成员类型Grass
为{{1}}
答案 0 :(得分:6)
听起来就像你想要制作的是一个链表。
以下是golang附带的一个示例:
http://golang.org/pkg/container/list/
答案 1 :(得分:3)
您可以拥有interface{}
类型的元素列表。你可以放入任何元素,当你把它拿出来时,你必须回到你想要的类型。这就像你在C示例中所做的那样void *
;并且也喜欢Generics之前的Java中的列表,以及没有泛型的Objective-C中的列表。 Go库中的所有容器都是这样做的。
如果没有泛型,则不会对元素类型进行编译时检查。
如果您真的想要,可以通过使用反射来获取元素类型并根据预期类型进行检查,从而实现元素类型的运行时检查。但是,这可能有点过头了。