【发布时间】:2020-05-14 18:08:16
【问题描述】:
我想递归地迭代结构定义,并为切片获取一种奇异元素。然后,创建该类型的空实例。例如:
type Path struct {
Name string
Points []Coordinate
}
type Coordinate struct {
Latitude float64
Longitude float64
}
假设类型在运行时未知,我如何创建嵌套类型的空实例(在上面的示例中为坐标)。我的意思是:
x := Coordinate{}
在输入时我得到 Path(可以是任何其他结构,具有不同类型的切片)?
【问题讨论】:
-
您自己能访问
Points字段吗?您只需要获取该切片的元素类型并为其创建一个新的零值吗? -
这就是问题所在,我不知道如何使用反射或其他方法动态创建零值。
-
有一个
reflect.Zero函数接受reflect.Type并返回reflect.Value。 -
@mkopriva
reflect.Zero()返回一个不可寻址、不可设置的值。如果需要更改/设置,最好使用reflect.New().Elem()。
标签: go reflection slice