zoukankan      html  css  js  c++  java
  • Go开发Struct转换成map两种方式比较

    最近做Go开发的时候接触到了一个新的orm第三方框架gorose,在使用的过程中,发现没有类似beego进行直接对struct结构进行操作的方法,有部分API是通过map进行数据库相关操作,那么就需要我们把struct转化成map,下面是是我尝试两种不同struct转换成map的方法

    mport (
        "encoding/json"
        "fmt"
        "reflect"
        "time"
    )
    
    type Persion struct {
        Id       int
        Name     string
        Address  string
        Email    string
        School   string
        City     string
        Company  string
        Age      int
        Sex      string
        Proviece string
        Com      string
        PostTo   string
        Buys     string
        Hos      string
    }
    
    func main() {
        StructToMapViaJson()
        //StructToMapViaReflect()
    }
    
    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.Println(time.Now().Sub(t))
    }
    一、通过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))
    }
    output:
    map[Proviece:jianxi Com:广州兰博基尼 Hos:zhonsndifneisnidnfie Name:zhaondifnei Company:sndifneinsifnienisn Buys:shensinfienisnfieni Age:23 PostTo:蓝鲸XXXXXXXX Address:大沙地 School:广州第十五中学 City:zhongguoguanzhou Sex:F Id:98439 Email:dashdisnin@126.com]
    duration:250467
    

      

    二、通过反射形式生成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))
    }
    output:
    map[Buys:shensinfienisnfieni Name:zhaondifnei City:zhongguoguanzhou Sex:F Proviece:jianxi Com:广州兰博基尼 Id:98439 School:广州第十五中学 Address:大沙地 Age:23 PostTo:蓝鲸XXXXXXXX Hos:zhonsndifneisnidnfie Email:dashdisnin@126.com Company:sndifneinsifnienisn]
    duration:104239
    

      结论

    通过比较可以看出,通过反射的形式转换基本上是通过json形式转换的两倍。



  • 相关阅读:
    idea 2019 1 spring boot 启动报错 An incompatible version [1.2.12] of the APR based Apache Tomcat Native library is installed, while Tomcat requires version [1.2.14]
    MONGODB-LINUX 安装步骤
    MYSQL-LINUX 安装步骤
    虚拟机linux centos7 查找ip不到的设置
    Spring Boot (日志篇):Log4j2整合ELK,搭建实时日志平台
    spring boot跨域请求访问配置以及spring security中配置失效的原理解析
    Java设计模式:23种设计模式
    注解实现原理
    【Azure 环境】Windows中安装Python azure-eventhub-checkpointstoreblob-aio模块时出错 ERROR: Could not install packages due to an EnvironmentError: [Errno 2] No such file or directory:
    【Azure微服务 Service Fabric 】Service Fabric中应用开启外部访问端口及微服务之间通过反向代理端口访问问题
  • 原文地址:https://www.cnblogs.com/dfsxh/p/10315442.html
Copyright © 2011-2022 走看看