golang结构体转map

发布时间:2020-07-25 08:14:47 作者:dccw
来源:网络 阅读:6844
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)
}
推荐阅读:
  1. golang中结构体的使用
  2. golang 碎片整理之 结构体

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

golang 结构体转 olang

上一篇:Java程序员最常见的SpringBoot有那些组件注册方式?

下一篇:windows下.bat程序开机自启动的几种方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》