找回密码
 立即注册
搜索
查看: 412|回复: 0

[go基础] golang 开发 Struct 转换成 map 两种方式

  [复制链接]
发表于 2023-2-28 20:58 | 显示全部楼层 |阅读模式

一、通过struct转json,json转成map

func StructToMapViaJson() {
    m := make(map[string]interface{})
    t := time.Now()
    person := Persion{
        Id:       98439,
        Name:     "zhaondifnei",
        Address:  "大沙地",
        Email:    "dashdisnin@126.com",
        School:   "广州第十五中学",
        City:     "zhongguoguanzhou",
        Company:  "sndifneinsifnienisn",
        Age:      23,
        Sex:      "F",
        Proviece: "jianxi",
        Com:      "广州兰博基尼",
        PostTo:   "蓝鲸XXXXXXXX",
        Buys:     "shensinfienisnfieni",
        Hos:      "zhonsndifneisnidnfie",
    }
    j, _ := json.Marshal(person)
    json.Unmarshal(j, &m)
    fmt.Println(m)
    fmt.Printf("duration:%d", time.Now().Sub(t))
}

二、通过反射形式生成map

func StructToMapViaReflect() {
    m := make(map[string]interface{})
    t := time.Now()
    person := Persion{
        Id:       98439,
        Name:     "zhaondifnei",
        Address:  "大沙地",
        Email:    "dashdisnin@126.com",
        School:   "广州第十五中学",
        City:     "zhongguoguanzhou",
        Company:  "sndifneinsifnienisn",
        Age:      23,
        Sex:      "F",
        Proviece: "jianxi",
        Com:      "广州兰博基尼",
        PostTo:   "蓝鲸XXXXXXXX",
        Buys:     "shensinfienisnfieni",
        Hos:      "zhonsndifneisnidnfie",
    }
    elem := reflect.ValueOf(&person).Elem()
    relType := elem.Type()
    for i := 0; i < relType.NumField(); i++ {
        m[relType.Field(i).Name] = elem.Field(i).Interface()
    }
    fmt.Println(m)
    fmt.Printf("duration:%d", time.Now().Sub(t))
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|学习笔记

GMT+8, 2024-10-18 13:29 , Processed in 0.024141 second(s), 13 queries , APCu On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表