package main import ( "encoding/json" "fmt" "reflect" "time" ) type Body struct { Person1 string Age int Salary float32 } func Struct2Map(obj interface{}) (data map[string]interface{}, err error) { data = make(map[string]interface{}) objT := reflect.TypeOf(obj) objV := reflect.ValueOf(obj) for i := 0; i < objT.NumField(); i++ { data[objT.Field(i).Name] = objV.Field(i).Interface() } err = nil return } func Test1() { t := time.Now() a := Body{"aaa", 2, 12.34} elem := reflect.ValueOf(&a).Elem() type_ := elem.Type() m := map[string]interface{}{} for i := 0; i < type_.NumField(); i++ { m[type_.Field(i).Name] = elem.Field(i).Interface() } fmt.Println(time.Now().Sub(t), m) } func Test2() { t := time.Now() persion := Body{"aaa", 2, 12.34} j, _ := json.Marshal(persion) fmt.Println(time.Now().Sub(t), string(j)) } func Test3() { m := make(map[string]interface{}) t := time.Now() persion := Body{"aaa", 2, 12.34} j, _ := json.Marshal(persion) json.Unmarshal(j, &m) fmt.Println(time.Now().Sub(t), m) } func Test4() { t := time.Now() persion := Body{"aaa", 2, 12.34} ret, _ := Struct2Map(persion) fmt.Println(time.Now().Sub(t), ret) } func main() { Test1() Test2() Test3() Test4() }