私は名前、種類とに渡される任意の構造体のすべてのフィールドのタイプをリストするルーチンを構築するためにリフレクションを使用しようとしている。ここでは、私がこれまで持っているものです: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:
フィールドはスライスである場合、型はブランクです。私は、スライスのデータ型を取得するにはいくつかの方法を試してみましたが、すべての試みはパニックになった...通常、この1:
reflect: call of reflect.Value.Elem on slice Value
すべてのフィールドの種類ように、このコードに行われる必要がどのような変更を含みますスライスは、出力に表示されますか?ここ
は、遊び場のリンクの:[]Foo
ようリテラルタイプで与えhttps://play.golang.org/p/zpfrYkwvlZ
綺麗な!おかげでicza! – sman