• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    详解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形式转换的两倍。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • golang struct 实现 interface的方法
    • golang中struct和interface的基础使用教程
    • 浅谈Go语言中的结构体struct & 接口Interface & 反射
    • 详解Angular之constructor和ngOnInit差异及适用场景
    • 详解Angular 中 ngOnInit 和 constructor 使用场景
    • golang struct扩展函数参数命名警告解决方法
    • 解析Go语言编程中的struct结构
    • Golang学习笔记(六):struct
    • Go语言中struct的匿名属性特征实例分析
    • Go语言struct类型介绍
    • Go语言struct类型详解
    上一篇:go实现redigo的简单操作
    下一篇:Go语言开发中redis的使用详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    详解Go开发Struct转换成map两种方式比较 详解,开发,Struct,转,换成,