首页 > 其他 > 详细

golang结构体转map

时间:2018-03-07 21:34:30      阅读:302      评论:0      收藏:0      [点我收藏+]
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() }
package main

import (
    "fmt"
    "reflect"
    "time"
)

type User struct {
    Id        int64
    Username  string
    Password  string
    Logintime time.Time
}

func Struct2Map(obj interface{}) map[string]interface{} {
    t := reflect.TypeOf(obj)
    v := reflect.ValueOf(obj)

    var data = make(map[string]interface{})
    for i := 0; i < t.NumField(); i++ {
        data[t.Field(i).Name] = v.Field(i).Interface()
    }
    return data
}

func main() {
    user := User{5, "zhangsan", "pwd", time.Now()}
    data := Struct2Map(user)
    fmt.Println(data)
}

golang结构体转map

原文:http://blog.51cto.com/13187574/2083961

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!