Если у вас есть дескриптор 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}