我想遞歸地迭代結構定義,并為切片獲取一種奇異元素。然后,創建該類型的空實例。例如: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}
- 1 回答
- 0 關注
- 117 瀏覽
添加回答
舉報
0/150
提交
取消