为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
胡说叔叔 2022-05-10 16:04:40
我想递归地迭代结构定义,并为切片获取一种奇异元素。然后,创建该类型的空实例。例如:type Path struct {  Name string  Points []Coordinate}type Coordinate struct {  Latitude float64  Longitude float64}假设在运行时类型未知,我如何创建嵌套类型的空实例(在上面的示例坐标中)。我是说:x := Coordinate{}在输入时我得到路径(可以是任何其他结构,具有不同类型的切片)?
查看完整描述

1 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

如果您有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}


查看完整回答
反对 回复 2022-05-10
  • 1 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信