i just trying learn to use reflection, i wanna go througe each field in the map[string]interface{} this why i using json.Unmarshal to interface{}.
func i2s(data interface{}, out interface{}) error {
fmt.Println(reflect.TypeOf(data).Kind())
switch reflect.TypeOf(data).Kind() {
case reflect.Map, reflect.Array, reflect.Ptr, reflect.Slice:
i2s(reflect.TypeOf(data).Elem(), out)
case reflect.Struct:
for i := 0; i < reflect.ValueOf(data).NumField(); i++ {
f := reflect.TypeOf(data).Field(i)
fmt.Println(f.Name, f.Type.Name())
if f.Tag != "" {
fmt.Println(f.Tag)
}
}
}
return nil
}
type Simple struct {
ID int
Username string
Active bool
}
func main() {
test := &Simple{
ID: 42,
Username: "dcandu",
Active: true,
}
jsonRaw, _ := json.Marshal(test)
var tmpData interface{}
json.Unmarshal(jsonRaw, &tmpData)
result := new(Simple)
i2s(tmpData, result)
}
When i run this code i get the infinite loop. Please tell me where i'm doing wrong.
Thank you.
Aucun commentaire:
Enregistrer un commentaire