PHP小编百草迭代混合类型切片是一种基于迭代器和混合类型的切片操作方法。它提供了一种灵活的方式来处理不同类型的数据集合,无论是数组、对象还是其他类型。通过迭代混合类型切片,我们可以快速
PHP小编百草迭代混合类型切片是一种基于迭代器和混合类型的切片操作方法。它提供了一种灵活的方式来处理不同类型的数据集合,无论是数组、对象还是其他类型。通过迭代混合类型切片,我们可以快速、高效地对数据进行切片操作,获取我们需要的子集。这种切片方式不仅简化了代码的编写,还提高了程序的执行效率。无论是在数据处理、算法设计还是其他领域,迭代混合类型切片都具有广泛的应用价值。
我需要在一个切片中有不同类型的结构。但我无法访问每个结构体的字段值。
package main
import "fmt"
type X struct {
Type string
Num int
}
type Y struct {
Type string
Num int
}
type Z struct {
Type string
Num int
}
func main() {
var items []interface{}
x := X{Type: "X-type", Num: 1}
items = append(items, x)
y := Y{Type: "Y-type", Num: 2}
items = append(items, y)
z := Z{Type: "Z-type", Num: 3}
items = append(items, z)
for _, item := range items {
fmt.Println(item) //{X-type 1} {Y-type 2} {Z-type 3}
//fmt.Println(item.Num) // item.Num undefined (type interface{} has no field or method Num)
//fmt.Println(item.Type) // item.Type undefined (type interface{} has no field or method Type)
}
}
如何访问每种结构类型的各个字段?
有几个选项。
使用类型开关:
for _, item := range items {
switch item := item.(type) {
case x:
fmt.printf("x: %d\n", item.num)
case y:
fmt.printf("y: %d\n", item.num)
case z:
fmt.printf("z: %d\n", item.num)
default:
// add code to handle unsupported type
}
}
使用反射包按名称访问字段:
for _, item := range items {
fmt.println(reflect.valueof(item).fieldbyname("num").interface().(int))
}
使用接口:
为每种类型添加访问器方法:
func (x x) getnum() int { return x.num }
func (y y) getnum() int { return y.num }
func (z z) getnum() int { return z.num }
声明一个接口:
type getnumer interface {
getnum() int
}
使用接口:
var items []GetNumer
x := X{Type: "X-type", Num: 1}
items = append(items, x)
...
for _, item := range items {
fmt.Println(item) //{X-type 1} {Y-type 2} {Z-type 3}
fmt.Println(item.GetNum())
}
以上就是迭代混合类型切片的详细内容,更多请关注编程网其它相关文章!
--结束END--
本文标题: 迭代混合类型切片
本文链接: https://lsjlt.com/news/562405.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0