Golang结构体映射mapstructure库怎么使用


这篇文章主要介绍“Golang结构体映射mapstructure库怎么使用”,在日常操作中,相信很多人在Golang结构体映射mapstructure库怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Golang结构体映射mapstructure库怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!在数据传递时,需要先编解码;常用的方式是JSON编解码。但有时却需要读取部分字段后,才能知道具体类型,此时就可借助mapstructure库了。mapstructure可方便地实现map[string]interface{}struct间的转换;使用前,需要先导入库:go get github.com/mitchellh/mapstructure默认情况下,mapstructure使用字段的名称做匹配映射(即在map中以字段名为键值查找字段值);注意匹配时是忽略大小写的。也可通过标签来设定字段映射名称:go中结构体是可以任意嵌套的;嵌套后即认为拥有对应的字段。但是,默认情况下mapstructure只处理当前结构定义的字段,若要自动处理内嵌字段需要添加标签squash:若源数据中有未映射的值(即结构体中无对应的字段),mapstructure默认会忽略它。可以在结构体中定义一个特殊字段(类型为map[string]interface{},且标签要设置为mapstructure:",remain"),来存放所有未能映射的字段中。mapstructure中可以使用Metadata收集一些解码时会产生的有用信息。为了获取这些信息,需要使用DecodeMetadata来解码: var metadata mapstructure.Metadata
err := mapstructure.DecodeMetadata(m, &p, &metadata)有时候,并不想对结构体字段类型和map[string]interface{}的对应键值做强类型一致的校验。这时可以使用WeakDecode/WeakDecodeMetadata方法,它们会尝试做类型转换:布尔转字符串:true = “1”, false = “0”;布尔转数字:true = 1, false = 0;数字转布尔:true if value != 0;字符串转布尔:可接受,真:1, t, T, TRUE, true, True假:0, f, F, FALSE, false, False数字转字符串:自动base10转换;负数转为无符号数(上溢);字符串转数字:根据前缀(如0x等)转换;空数组与空map间互转;单个值转为切片;除将map转换为结构体外,mapstructure也可以将结构体反向解码为map[string]interface{}。在反向解码时,我们可以为某些字段设置mapstructure:“,omitempty”,当这些字段为默认值时,就不会出现在map中:mapstructure提供了解码器(Decoder),可灵活方便地控制解码:一个支持弱类型转换的示例:要获取的结果放到config的result中通过一个mes免费云主机域名sageData结构,action会指示最终的data类型。接收到数据后,先解析出atcion,再根据action转换为真实的类型。因time.Time是一个结构体(json序列化时会转换为时间字符串),mapstructure无法正确处理,所以推荐使用时间戳。为了能正确解析内嵌的DataBasic,需要标记为squash。到此,关于“Golang结构体映射mapstructure库怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注百云主机网站,小编会继续努力为大家带来更多实用的文章!

相关推荐: vue项目在安卓低版本机显示空白如何解决

今天小编给大家分享一下vue项目在安卓低版本机显示空白如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。vue项目在安卓低版本机显示空白原因…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/03 15:01
下一篇 03/03 15:05

相关推荐