Я просто пытаюсь научиться использовать отражение, я хочу пройти через каждое поле в интерфейсе карты [string] {}, поэтому я использую
json.Unmarshal для интерфейса {}.
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)
}
Когда я запускаю этот код, я получаю бесконечный цикл.
Пожалуйста, скажите мне, где я делаю неправильно.
Спасибо.