Этот вопрос основан на следующем: глубоко отразиться на структуре Мне нужно то же самое - расширить определение структуры, чтобы затем передать его как объект JSON, но с той лишь разницей, что структура содержит указатели на другие структуры.Таким образом, предоставленный код не может справиться с этим.Я попытался изменить его следующим образом:
func printFields(prefix string, t reflect.Type) {
for i := 0; i < t.NumField(); i++ {
f := t.Field(i)
fmt.Printf("%v%v %v\n", prefix, f.Name, f.Type)
if f.Type.Kind() == reflect.Struct {
fmt.Println(reflect.New(f.Type))
printFields(fmt.Sprintf(" %v", prefix), f.Type)
} else if f.Type.Kind() == reflect.Ptr {
fmt.Println("type ", f.Type )
printFields(fmt.Sprintf(" %v", prefix), f.Type)
}
}
}
Но в случае указателей это приводит к панике.Как это исправить?
РЕДАКТИРОВАТЬ: получил то, что мне нужно:
func printFields(prefix string, t reflect.Type) {
if t.Kind() != reflect.Struct {
return
}
for i := 0; i < t.NumField(); i++ {
f := t.Field(i)
fmt.Printf("%v%v %v\n", prefix, f.Name, f.Type)
if f.Type.Kind() == reflect.Struct {
fmt.Println(reflect.New(f.Type))
printFields(fmt.Sprintf(" %v", prefix), f.Type)
} else if f.Type.Kind() == reflect.Ptr {
printFields(fmt.Sprintf(" %v", prefix), f.Type.Elem())
}
}
}
func printExpandedStruct(s interface{}) {
printFields("", reflect.ValueOf(s).Type())
}