目录

  • 前言
  • 正文
  • 结尾

前言

今天遇到一个小坑,但是自己陷进去好久,说起来有些不好意思,但是感觉还是应该拿出来晒一晒,希望大家别再被类似的问题耽误了。

解析下面的 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相关推荐

  1. Go语言-switch case | switch中判断多个值、interface conversion: interface {} is float64, not int

    文章目录 Go语言-switch case 背景 switch case Golang中switch的特殊用法--fallthrough go语言switch中判断多个值 Type Switch,判断 ...

  2. panic: interface conversion: interface {} is nil, not chan *sarama.ProducerError

    使用golang kafka sarama 包时,遇到如下问题: 高并发情况下使用同步sync producer,偶尔遇到crash: panic: interface conversion: int ...

  3. golang语言 []interface{}和interface{}

    文章目录 golang语言 []interface{} interface(接口) interface应用场景 interface{} 空接口 []interface{} golang中为什么[]st ...

  4. abstract interface 和 interface 没有区别

    前一段用到Spring的ApplicationContext接口,查看它提供的方法,打开jar包,看到的信息如下: Java代码  public abstract interface org.spri ...

  5. 成功解决ValueError: column index (256) not an int in range(256)

    成功解决ValueError: column index (256) not an int in range(256) 目录 解决问题 解决思路 解决方法 解决问题 ValueError: colum ...

  6. java interface class_java interface和class中的协变

    协变 Java中的协变是指,当发生继承时,子类中重写父类的方法时,可以返回父类方法返回类型的子类型.比如: class SuperClass{} class SubClass extends Supe ...

  7. python中a=str(int(a))什么意思_如何解决TypeError:只能将str(而不是“int”)连接到str - python...

    我决定为进行Unicode测试而制作某种秘密代码. 我已经通过在Unicode中添加数字来做到这一点,所以这将是一个秘密. 我一直收到此错误,但我不知道如何解决. 有什么解决方案吗? 原始码 mess ...

  8. 解决:Conversion to Dalvik format failed: Unable to execute dex: null

    Conversion to Dalvik format failed: Unable to execute dex: null,如果出现这种错误不要着急.在保证代码没有错误的情况下解决办法有两种: 1 ...

  9. 解决The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value

    问题描述 在平时使用代码操作SQL Server数据库时,会遇到给日期格式的字段赋值,然后插入或者更新到数据库中等. 平时使用的日期都是比较靠近现在的时间,所以一般不会遇到问题.但是有时候,比如在C# ...

最新文章

  1. 80个招聘求职网站整理,不管招聘or求职,看这个就够了!
  2. 2021考研 计算机国家线解读及对应策略
  3. 数据库-优化-groupby的优化
  4. 机器学习——文件的读取
  5. 测试框架之GTest
  6. Ajax ControlToolkit - AnimationExtender Action语法(笔记)
  7. 如何估算一个分布式系统的容量
  8. Android开发笔记(一百五十五)利用GL10描绘点、线、面
  9. sqlserver management studio 2014 升级2016_画质提升音质更佳:Insta360影石ONE R迎来最强升级...
  10. c语言数组的程序,C语言数组程序举例
  11. 《成为乔布斯》读后感
  12. 科大讯飞18岁成人礼:这家极客公司未来不设限
  13. 自然语言理解(NLU)概念浅析
  14. Java继承思想(理解+代码)
  15. 原生Python实现KNN算法,并用鸢尾花(iris)数据集测试
  16. 浅谈游戏辅助程序的制作 【经典】
  17. VLC 中文显示乱码问题
  18. svn 添加忽略后解除被忽略的文件或文件夹
  19. PaddleOCR的初体验
  20. 在mini2440上移植使用ffmpeg录像

热门文章

  1. 人体红外传感器HC-SR501
  2. 基本共射放大电路的动态分析(低频、Ri、Ro大小对电路影响的分析)
  3. 第三章第七题(金融应用:整钱兑零)(Financial application: monetary units)
  4. JsonProperty.Access.READ_ONLY 导致查询字段为null
  5. 余士维讲座中的十八个故事[转载]
  6. 为何使用云原生应用架构 四 :独霸天下之四大绝技 — 终端多样性 篇
  7. 少壮不努力,老大徒伤悲
  8. 声音/声学成像2021-4-13
  9. CW32L083系列MCU系统时钟详解
  10. 【微信小程序】图片违法违规内容鉴别