Go 中的任何类型和实现泛型列表
在 Go 编程中,泛型的缺乏会给数据结构实现带来挑战。让我们解决两个常见问题:
1。实现泛型列表
Go 不直接支持泛型,但它提供了 interface{} 类型来表示任何值。该接口可用于创建可以保存任何类型值的“通用”数据结构。
但是,使用 interface{} 有其缺点,因为您需要在访问值时手动键入断言。例如,以下代码定义了一个interface{}列表:
type AnyList []interface{}
要将整数添加到列表中:
list := AnyList{1}
要检索整数,您必须键入assert it返回其原始类型:
value := list[0].(int)
2.创建具有特定类型字段的容器
在 Go 中,没有与 Haskell 中的 List a 或 Scala 中的 val List[Animal { type SuitableFood = Grass} ] 等代数数据类型直接等效的东西。但是,您可以使用接口和嵌入的组合来实现类似的结果。
例如,您可以为动物定义一个接口:
type Animal interface { GetSuitableFood() string }
然后您可以为动物定义一个结构体具有字符串类型的“SuitableFood”字段:
type GrassEatingAnimal struct { Animal SuitableFood string }
创建可以吃的动物列表草:
list := []*GrassEatingAnimal{}
将动物添加到列表中:
animal := &GrassEatingAnimal{SuitableFood: "Grass"} list = append(list, animal)
这种方法提供了一种创建具有特定类型字段的容器的方法,尽管与语言相比需要更多的手动工作与泛型。
以上是如何在没有泛型的情况下在 Go 中实现泛型列表和特定于类型的容器?的详细内容。更多信息请关注PHP中文网其他相关文章!