小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《反射 - 获取单个切片元素的类型》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!
问题内容我想递归地迭代结构定义,并为切片获取单个元素的类型。然后,创建该类型的空实例。例如:
type Path struct {
Name string
Points []Coordinate
}
type Coordinate struct {
Latitude float64
Longitude float64
}
假设类型在运行时未知,我如何创建嵌套类型的空实例(在上面的示例中坐标)。我的意思是:
x := 坐标{}
当输入时我得到 path (可以是任何其他结构,具有不同类型的切片)?
解决方案
如果您有某个值的 reflect.Type
描述符,则可以使用 reflect.New()
函数来获取指向新的归零值的指针。
这将返回一个 reflect.Value
值。这将是一个指针,要获取指向对象的 reflect.value
,请使用 Value.Elem()
。要“解开”reflect.value()
内保存的值,您可以使用 Value.Interface()
。
因此,如果您有切片的 reflect.type
描述符,则可以使用 type.elem()
来获取切片元素类型的 reflect.type
描述符。
请参阅此示例:
p := path{
name: "foo",
points: []coordinate{
{1.1, 2.2},
{3.3, 4.4},
},
}
v := reflect.valueof(p)
f := v.fieldbyname("points")
cv := reflect.new(f.type().elem()).elem()
c := cv.interface()
fmt.printf("%#v\n", c)
此输出(在 Go Playground 上尝试):
main.Coordinate{Latitude:0, Longitude:0}
好了,本文到此结束,带大家了解了《反射 - 获取单个切片元素的类型》,希望本文对你有所帮助!关注编程网公众号,给大家分享更多Golang知识!