我只是尝试学习使用反射,我想通过map [string] interface {}中的每个字段,这就是为什么我使用 json。解组接口{}。
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)
}
运行此代码时,出现无限循环。 请告诉我我在哪里做错了。
谢谢。