登录
首页 >  Golang >  Go问答

反射 - 获取单个切片元素的类型

来源:stackoverflow

时间:2024-04-04 08:27:34 279浏览 收藏

小伙伴们对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学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>