解决:interface conversion: interface {} is float64, not int
目录
- 前言
- 正文
- 结尾
前言
今天遇到一个小坑,但是自己陷进去好久,说起来有些不好意思,但是感觉还是应该拿出来晒一晒,希望大家别再被类似的问题耽误了。
解析下面的 json 结构:
"video": {"width": 1280,"height": 720
}
首先,我们把问题简化,假设我们拿到了 map[string]interface{} 类型的 video 实例,如何基于 video 实例读取 width 和 height 的值,注意是整形数值,不是字符串。
正文
原始方案
根据我们抽象出来的问题,解决思路也是非常清晰的,我们先根据 string 类型的关键字 key,也就是 width 和 height 得到接口对象 w 和 h。然后,对接口类型进行强制转换,得到最终的 int 整形数值。
最开始的编码方式是直接对接口类型的 w 和 h 强转 int 整形类型,就发生上面的报错:
interface conversion: interface {} is float64, not int
具体代码实现如下:
w := video["width"]
h := video["height"]
if w != nil && h != nil {width := w.(int)height := h.(int)logger.Infof("width:%d, height:%d", width, height)if width != 0 && height != 0 {output.Dimensions = strconv.Itoa(width) + "x" + strconv.Itoa(height)}
}
最终方案
出现上述问题时,自己始终没有意识到,interface {} 接口类型不可以直接强转成 int 整形类型,始终怀疑自己在编码细节上有问题,因此走偏了。
最终的结果就是换了多种实现方式,但都没有改到根本上。后来无意中看到 Golang 类型介绍时,才发现 interface {} 接口类型是 float64 类型,如果想要得到 int 整形数值,需要先转换成 float 类型。
因此,找到了最终的解决方法。
最终代码实现如下:
w := video["width"]
h := video["height"]
if w != nil && h != nil {width := int(w.(float64))height := int(h.(float64))logger.Infof("width:%d, height:%d", width, height)if width != 0 && height != 0 {output.Dimensions = strconv.Itoa(width) + "x" + strconv.Itoa(height)}
}
结尾
这是实际开发过程中遇到的一个小坑,但是让我意识到了对盲点的持续补齐。好啦,就说这么多吧。
作者简介:大家好,我是 liuzhen007(Data-Mining),是一位音视频技术爱好者,同时也是CSDN博客专家、华为云社区云享专家、签约作者,欢迎关注我分享更多干货!
解决:interface conversion: interface {} is float64, not int相关推荐
- Go语言-switch case | switch中判断多个值、interface conversion: interface {} is float64, not int
文章目录 Go语言-switch case 背景 switch case Golang中switch的特殊用法--fallthrough go语言switch中判断多个值 Type Switch,判断 ...
- panic: interface conversion: interface {} is nil, not chan *sarama.ProducerError
使用golang kafka sarama 包时,遇到如下问题: 高并发情况下使用同步sync producer,偶尔遇到crash: panic: interface conversion: int ...
- golang语言 []interface{}和interface{}
文章目录 golang语言 []interface{} interface(接口) interface应用场景 interface{} 空接口 []interface{} golang中为什么[]st ...
- abstract interface 和 interface 没有区别
前一段用到Spring的ApplicationContext接口,查看它提供的方法,打开jar包,看到的信息如下: Java代码 public abstract interface org.spri ...
- 成功解决ValueError: column index (256) not an int in range(256)
成功解决ValueError: column index (256) not an int in range(256) 目录 解决问题 解决思路 解决方法 解决问题 ValueError: colum ...
- java interface class_java interface和class中的协变
协变 Java中的协变是指,当发生继承时,子类中重写父类的方法时,可以返回父类方法返回类型的子类型.比如: class SuperClass{} class SubClass extends Supe ...
- python中a=str(int(a))什么意思_如何解决TypeError:只能将str(而不是“int”)连接到str - python...
我决定为进行Unicode测试而制作某种秘密代码. 我已经通过在Unicode中添加数字来做到这一点,所以这将是一个秘密. 我一直收到此错误,但我不知道如何解决. 有什么解决方案吗? 原始码 mess ...
- 解决:Conversion to Dalvik format failed: Unable to execute dex: null
Conversion to Dalvik format failed: Unable to execute dex: null,如果出现这种错误不要着急.在保证代码没有错误的情况下解决办法有两种: 1 ...
- 解决The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value
问题描述 在平时使用代码操作SQL Server数据库时,会遇到给日期格式的字段赋值,然后插入或者更新到数据库中等. 平时使用的日期都是比较靠近现在的时间,所以一般不会遇到问题.但是有时候,比如在C# ...
最新文章
- 80个招聘求职网站整理,不管招聘or求职,看这个就够了!
- 2021考研 计算机国家线解读及对应策略
- 数据库-优化-groupby的优化
- 机器学习——文件的读取
- 测试框架之GTest
- Ajax ControlToolkit - AnimationExtender Action语法(笔记)
- 如何估算一个分布式系统的容量
- Android开发笔记(一百五十五)利用GL10描绘点、线、面
- sqlserver management studio 2014 升级2016_画质提升音质更佳:Insta360影石ONE R迎来最强升级...
- c语言数组的程序,C语言数组程序举例
- 《成为乔布斯》读后感
- 科大讯飞18岁成人礼:这家极客公司未来不设限
- 自然语言理解(NLU)概念浅析
- Java继承思想(理解+代码)
- 原生Python实现KNN算法,并用鸢尾花(iris)数据集测试
- 浅谈游戏辅助程序的制作 【经典】
- VLC 中文显示乱码问题
- svn 添加忽略后解除被忽略的文件或文件夹
- PaddleOCR的初体验
- 在mini2440上移植使用ffmpeg录像
热门文章
- 人体红外传感器HC-SR501
- 基本共射放大电路的动态分析(低频、Ri、Ro大小对电路影响的分析)
- 第三章第七题(金融应用:整钱兑零)(Financial application: monetary units)
- JsonProperty.Access.READ_ONLY 导致查询字段为null
- 余士维讲座中的十八个故事[转载]
- 为何使用云原生应用架构 四 :独霸天下之四大绝技 — 终端多样性 篇
- 少壮不努力,老大徒伤悲
- 声音/声学成像2021-4-13
- CW32L083系列MCU系统时钟详解
- 【微信小程序】图片违法违规内容鉴别