原文链接:https://www.jianshu.com/p/81c4304f6d1b

最近做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))
}

二、通过反射形式生成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))
}

转载于:https://www.cnblogs.com/wangjq19920210/p/11600479.html

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

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

    最近做Go开发的时候接触到了一个新的orm第三方框架gorose,在使用的过程中,发现没有类似beego进行直接对struct结构进行操作的方法,有部分API是通过map进行数据库相关操作,那么就需要 ...

  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. golang读取conf文件的两种方式(ini和Viper)

    文章目录 前言 一.ini包 1.下载 2.使用方法 法一:简单方法 法二:结构体反射 二.viper配置管理 1.下载 2.viper的特点 3.使用方法 读取 总结 前言 平时写项目都是习惯于将什 ...

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

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

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

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

最新文章

  1. Linux下视频截取命令
  2. JetBrains DataGrip工具配置数据库过程详解
  3. UpdateProgress使用
  4. Exception in thread AWT-EventQueue-0 java.lang.IllegalThreadStateException
  5. 基于FPGA的FFT变换实现
  6. 项目中需要总结的内容
  7. LeetCode 1979. 找出数组的最大公约数
  8. server系统万能网卡驱动离线版_科普一分钟|BIOS引导+MBR硬盘格式装系统方法
  9. AUTOSAR标准与产业发展动态
  10. 里式替换(LSP)跟多态有何区别?
  11. android bool转字符串,Android 知识点——当json传入字符串,使用Boolean接收时,GSON会将其转换为false...
  12. Python日期时间格式转换
  13. 《Advanced .NET Debugging》 读书笔记 Listing 3-6: 使用sxe在程序载入mscorwks之后停下来载入sos...
  14. 平面设计斜线排版的技巧方法
  15. web前端一张页面多少钱?
  16. 爱奇艺SOAR探索与实践
  17. 阿里云服务器建站、心选建站、定制建站有什么区别,如何选择
  18. C++课程设计指导书
  19. 报错信息:Avoid mutating a prop directly since the value will be overwritten
  20. 调频 调幅 与 通信

热门文章

  1. koa2 mysql增删改查_koa2实现对mysql的增删改查函数封装
  2. 有赞的交易系统架构困局以及破局之道
  3. 显示计算机程序的表格如何打开,电脑表格怎么小窗口显示不出来怎么办
  4. python中文件操作中不同的文件操作有何差异_Python学习基础篇 -6: Python中的文件操作...
  5. alias怎么每次登陆都保存_alias命令使用说明
  6. 【sprinb-boot】@ComponentScan 跳过扫描 excludeFilters
  7. java 中 Object XML 互转,最终选择Xstream
  8. linux查看vxlan命令,[svc]linux上vxlan实战
  9. fopen rt wt matlab,fopen的使用方法
  10. oracle存储技术,oracle存储体系总结