gpt4 book ai didi

go - go编程语言中的任何类型和实现泛型列表

转载 作者:IT王子 更新时间:2023-10-29 00:51:48 26 4
gpt4 key购买 nike

我正在尝试 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} ]

获取 AnimalsList,其成员类型 SuitableFoodGrass

最佳答案

您可以拥有 interface{} 类型的元素列表。你可以把任何元素放进去,当你取出来的时候,你必须强制转换回你想要的类型。这就像您在 C 示例中所做的 void * ;并且还喜欢泛型之前的 Java 中的列表,以及没有泛型的 Objective-C 中的列表。 Go 库中的所有容器都这样做。

没有泛型,就没有元素类型的编译时检查。

如果您确实需要,您可以通过使用反射获取元素类型并根据预期类型检查它们来实现元素类型的运行时检查。然而,这可能有点矫枉过正。

关于go - go编程语言中的任何类型和实现泛型列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7742635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com