Golang interface{} 转换为某个结构体 区块链知识系列 - Raft 共识 OpenHarmony开发者文档开源计划,快快加入吧 融合创新提升服务,大数据搭建信息网 长三角税收一体化按下“快进键” 河钢集团与海尔集团签署物联网生态战略合作协议 1一个拥有万物互联神话,让我们看物联网是如何蓬勃发展的? 重庆大数据产业研究院成立,首批专家服务团名单公布 百分点大数据技术团队:互联网舆情系统的架构实践 水泥大数据研究院郑建辉:四季度水泥价格仍有望冲击去年高位 中国物联网与绿色智慧城市发展论坛召开 欧普照明点亮智慧道路之光 Android & Kotlin:Retrofit + Hilt 实现 看妹子app Android - 控件抖动效果 DevEco studio 一直加载gradle android如何获取调试版及发布版安全码SHA1 Android手机获取IP地址的两种方法 Android Activity 启动过程详解(上) 思维破局:挣钱其实没那么难,关键是方式要对 大数据赋能全产业链 为市民提供“一杯好奶” 运用大数据实现节能减排精准化 2020最新拼多多Java面试版,五面拿到28K的Offer 中国电信(安徽)大数据产业园落户南岗科技园 打造华东区域云计算领头羊 深度解读!阿里腾讯滴滴字节首选,新一代大数据引擎Flink厉害在哪?附学习礼包 网络编程5:socket服务端和客户端代码实现 微信小程序 蓝牙重连异常 errCode:10004,errMsg:notifyBLECharacteristicValueChange:fail setNot 蓝桥杯--第八届省赛试题-电子钟程序设计 【TCP回声服务器】一篇文章帮助你看懂TCP! 关于国标GB28181流媒体协议视频平台EasyGBS设备无法接入平台的问题排查 机器学习16 -- Lifelong Learning 终生学习 Vuex中发送mock请求返回数据 JS 正则表达式详解 学习笔记 花了30分钟,给女朋友们写了个最近抖音很火的3D立体动态相册 这 16 个 CSS 伪类,助你提升布局效率! Mysql系列第八讲 详解排序和分页(order by & limit)及存在的坑 SQL语句的一些应用语句 介绍三个开发技术小知识点 数据库系统概论(1) Mysql备份和恢复的类型,备份恢复的几种方法! --个人整理 MySql数据库基本操作(一) 前八月融合创新提升服务,大数据搭建信息网 长三角税收一体化按下“快进键” 一些建议:给当年刚做程序员的我 谁是物联网江湖明日之星?答案是新CIoT 企业信用有效“变现” 江苏银行物联网金融规模达185亿 2020年中国5G物联网行业:中国通信运营商5G投资达1.23万亿元-可下载 搭建 GFS 分布式文件系统-----实操 排障集锦:九九八十一难之第十五难!-------------史上最全rsync报错详解 docker系列1---docker隔离和限制技术 Linux系统安全及应用加固———最适合新手学,新手都能看懂!超详细的理论+超详细的实验!呕心沥血之作完成! LAMP架构集成ownCloud搭建私有云盘 Shell脚本正则表达式(一) Linux第一人称侵入进程的好地方
您的位置:首页 >大数据 >

Golang interface{} 转换为某个结构体

ps:开发中实际遇到的场景,在 go 语言中 interface{} 可以接收任何类型,但是我们实际使用不光需要接收,我们接收之后更是要操作这些值

简单的类型转换

var num1 int32 = 10fmt.Printf("Type: %T, Value: %d\n", num1, num1)num2 := uint32(num1)fmt.Printf("Type: %T, Value: %d\n", num2, num2)

output

Type: int32, Value: 10Type: uint32, Value: 10

简单的类型转换直接使用 Type(x) 转换即可。

interface{} 类型转换 直接利用反射的原理,使用断言来实现。

x.(T)

使用断言会存在两种可能。

第一种,如果断言的类型 T 是一个具体类型,然后类型断言检查 x 的动态类型是否和 T 相同。如果这个检查成功了,类型断言的结果是 x 的动态值,它的类型是 T。 换句话说,具体类型的类型断言从它的操作对象中获得具体的值。如果检查失败,接下来这个操作会抛出 panic。第二种,如果相反地断言的类型 T 是一个接口类型,然后类型断言检查是否 x 的动态类型满足 T。如果这个检查成功了,动态值没有获取到;这个结果仍然是一个有相同动态类型和值部分的接口值,但是结果为类型 T。 换句话说,对一个接口类型的类型断言改变了类型的表述方式,改变了可以获取的方法集合(通常更大),但是它保留了接口值内部的动态类型和值的部分。

以上两段出自 go 语言圣经 https://books.studygolang.com/gopl-zh/ch7/ch7-10.html

测试一下

type Order struct {ordIdint`json:"order_id" validate:"required"`customerName string `json:"customerName" validate:"required"`callback func() `json:"call_back" validate:"required"`}func InterfaceToStruct(object interface{}) {obj := object.(Order)fmt.Printf("Object = %v\n", obj)}func main() {o := Order{ordId:100,customerName: "Jack",callback: func() {},}InterfaceToStruct(o)}

output

Object = {100 Jack 0x49f940}

没有问题。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。