2017-05-26 1 views
0
fmt.Println(v.Kind()) 
fmt.Println(reflect.TypeOf(v)) 

Wie kann ich die Art des reflektierten Wertes einer Scheibe herausfinden?Golang reflect Wert Art der Scheibe

Die obigen Ergebnisse in

v.Kind = slice 
typeof = reflect.Value 

Wenn ich zu Set versuchen stürzt es, wenn ich die falsche Scheibe

t := reflect.TypeOf([]int{}) 
s := reflect.MakeSlice(t, 0, 0) 
v.Set(s) 

Für []int{} Beispiel zu erstellen, anstatt []string{} so muss ich die genaue Scheibe wissen Art des Reflect-Werts, bevor ich einen erzeuge.

Antwort

1

zu starten, müssen wir sicherstellen, dass die wir mit einer Scheibe von Tests zu tun hat: reflect.TypeOf(<var>).Kind() == reflect.Slice

Ohne diese Kontrolle, riskieren Sie eine Laufzeit Panik. So, jetzt, wo wir wissen, arbeiten wir mit einer Scheibe, ist der Elementtyp zu finden, so einfach wie: typ := reflect.TypeOf(<var>).Elem()

Da wir wahrscheinlich viele verschiedene Elementtypen erwarten sind, können wir eine switch-Anweisung verwenden, um zu unterscheiden:

t := reflect.TypeOf(<var>) 
if t.Kind() != reflect.Slice { 
    // handle non-slice vars 
} 
switch t.Elem() { // type of the slice element 
    case reflect.Int: 
     // Handle int case 
    case reflect.String: 
     // Handle string case 
    ... 
    default: 
     // custom types or structs must be explicitly typed 
     // using calls to reflect.TypeOf on the defined type. 
} 
Verwandte Themen