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

mport ("encoding/json""fmt""reflect""time"
)type Persion struct {Id       intName     stringAddress  stringEmail    stringSchool   stringCity     stringCompany  stringAge      intSex      stringProviece stringCom      stringPostTo   stringBuys     stringHos      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形式转换的两倍。

转载于:https://www.cnblogs.com/dfsxh/p/10315442.html

Go开发Struct转换成map两种方式比较相关推荐

  1. golang 开发 Struct 转换成 map 两种方式比较

    原文链接:https://www.jianshu.com/p/81c4304f6d1b 最近做Go开发的时候接触到了一个新的orm第三方框架gorose,在使用的过程中,发现没有类似beego进行直接 ...

  2. 用VLC开发视频播放器/组件(两种方式:libVLC / VLC-Qt)

    测试环境 MSVC-2015 Qt 5.14.2 QCreator 1. libVLC(关键步骤) 参考:心流剑 libVLC 各版本 下载链接 我的下载版本为:3.0.11 sdk/lib文件夹目录 ...

  3. ABAP和XML数据格式互相转换的两种方式

    ABAP和XML数据格式互相转换是广大开发人员经常遇到的需求.本文介绍两种方式. 1. ABAP提供了一个工具类cl_proxy_xml_transform,通过它的两个方法abap_to_xml_x ...

  4. matlab 转换 tfrecord,训练数据集与TFRecord互相转换的两种方式

    TensorFlow使用TFRecord格式来统一存储数据,该格式可以将图像数据.标签信息.图像路径以及宽高等不同类型的信息放在一起进行统一存储,从而方便有效的管理不同的属性. 将训练数据集转成TFR ...

  5. 技巧:Go 结构体如何转换成 map[string]interface{}

    本文介绍了Go语言中将结构体转成map[string]interface{}时你需要了解的"坑",也有你需要知道的若干方法. 我们在Go语言中通常使用结构体来保存我们的数据,例如要 ...

  6. unicode和字符串之间的转换有两种方式

    unicode和字符串之间的转换有两种方式. 1.1.通过JDK自带的"native2ascii"进行转换     首先,您测试的机器需要安装JDK,比如我的机器环境,我的JDK安 ...

  7. java中byte数组与int类型的转换(两种方式)

    java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形 ...

  8. Wordpress开发 - 获取作者头像的两种方法

    写在前面 今天又被一个头像坑搞惨了,一般我们获取作者的信息是都需要在循环判断中才可以使用的!比如获取作者名称 <?php the_author(); ?> .如果没有在 <?php ...

  9. 把json对象串转换成map对象

    2019独角兽企业重金招聘Python工程师标准>>> /**    * nc只支持简单的   * 把json对象串转换成map对象    * @param jsonObjStr e ...

最新文章

  1. 在ROS中使用奥比中光Orbbec Astra Pro
  2. 南京超过广州!4 月程序员工资统计出炉,平均 14596 元
  3. php 运行外部程序_PHP实现执行外部程序的方法详解
  4. 9.10 css
  5. grub2的配置文件grub.cfg详解
  6. 容器可以作为全局变量吗_四季青是风水树吗?哪些可以作为风水树?
  7. 网页禁止复制的chrome插件办法
  8. SQL的数据定义功能及语句:
  9. msys2安装gcc、g++编译器
  10. 深入理解JavaScript系列(12):变量对象(Variable Object)
  11. 【陆勤阅读】参加kaggle数据挖掘竞赛是怎样一种体验?
  12. 第一章 Shiro简介——《跟我学Shiro》[张开涛]
  13. mac上面比较好用的软件
  14. tp 框架防sql注入
  15. 安卓psp模拟器联机教程_psp模拟器联机游戏下载-psp模拟器联机对战版v1.0 安卓版 - 极光下载站...
  16. endnote修改正文中参考文献标注_如何在Endnote中修改参考文献格式
  17. python多个函数_请教:一个类中可以定义多个同名函数?
  18. 比心app源码,vue 视频播放
  19. sql语句中调用将汉字转换为拼音函数
  20. 忽视警告_不要忽视下雨的风险2

热门文章

  1. linux postfix 搭建,linux 下搭建postfix服务器
  2. java 类型转换方法_java数据类型转换的常见方法
  3. Oracle开发常用知识
  4. mysql读书笔记----时间函数
  5. 同时获取同一等级下多个class值的节点的方法
  6. qt 设计师缩放_重新设计缩放体验
  7. 译文 | Vue 在哪些方面做的比 React 更好?
  8. 若川知乎高赞:有哪些必看的 JS 库?
  9. linux go环境安装和基本项目结构
  10. 上传文件的input问题以及FormData特性