Я пытаюсь использовать отражение, чтобы построить программу, которая будет содержать имя, Вид и тип всех полей в произвольной структуры, которая будет послана в Вот что я получил до сих пор:Как использовать Golang Reflection, чтобы получить тип поля структуры, являющегося срезом? .
type StatusVal int
type Foo struct {
Name string
Age int
}
type Bar struct {
Status StatusVal
FSlice []Foo
}
func ListFields(a interface{}) {
v := reflect.ValueOf(a).Elem()
for j := 0; j < v.NumField(); j++ {
f := v.Field(j)
n := v.Type().Field(j).Name
t := f.Type().Name()
fmt.Printf("Name: %s Kind: %s Type: %s\n", n, f.Kind(), t)
}
}
func main() {
var x Bar
ListFields(&x)
}
выход заключается в следующем:
Name: Status Kind: int Type: StatusVal
Name: FSlice Kind: slice Type:
Когда поле представляет собой срез, тип пустым. Я попробовал несколько способов, чтобы получить тип данных Срез, но все попытки привели к панике ... обычно это одна:
reflect: call of reflect.Value.Elem on slice Value
Что нужно сделать, чтобы этот код изменения так, чтобы тип для всех полей, в том числе ломтики, будут перечислены в результатах?
Вот ссылка площадки: https://play.golang.org/p/zpfrYkwvlZ
Красивый! Спасибо icza! – sman