解决:interface conversion: interface {} is float64, not int-程序员宅基地

技术标签: 《Go从放弃到入门》  golang  后端  开发语言  

目录

  • 前言
  • 正文
  • 结尾

前言

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

解析下面的 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),是一位音视频技术爱好者,同时也是程序员宅基地专家、华为云社区云享专家、签约作者,欢迎关注我分享更多干货!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liuzehn/article/details/121302718

智能推荐

redis set 超时_Redis 更新(set) key值 会重置过期时间问题-程序员宅基地

文章浏览阅读2.2k次。今天在开发的过程中遇到了一个Redis的问题: 当你在redis中插入一个key值,并且设置了对应过期时间. 当过期时间还没到的时候重新 更新 key值会导致 过期时间被刷新, 针对这个问题: 我查看了下redis的官方文档, 他们是这么解释的:The timeout will only be cleared by commands that delete or overwrite the con..._更新redis的值过期时间刷新了

Javascript 五个特性介绍_es14 特性-程序员宅基地

文章浏览阅读504次。一、apply介绍1、apply是前端javascript方法默认自带的方法,这要的用法是替换掉当前执行的方法的this对象,从而实现继承,或者修改方法内部使用到this对象;这次先说继承:例如:首先,在test方法里边声明两个方法,add,sub:function test(){this.add=function(a,b){return a_es14 特性

挑战坚持每天写算法题一个月_一个月学算法-程序员宅基地

文章浏览阅读992次,点赞10次,收藏5次。目录前言2021-10-8题目合并两个有序数组解题思路代码其他思路前言因为最近参加了csdn的一个大博主的活动,坚持每天写写力扣算法题一个月,我觉得这个活动很有意义,因为每天能写一道算法题很容易,但是坚持一周呢?一个月呢?一年呢?能坚持的人少之又少,但是如果坚持每天写几道算法题并坚持很久,也是会有很大的收获的,为了自己的目标,我们冲就完事!!!顺便给大佬谢谢这个大佬提供这个机会!!大家也可以去大佬的博客看看干货!!!向大佬学习!!2021-10.._一个月学算法

adb无线连接设备进行调试操作(Wi-Fi连接)_adb connect-程序员宅基地

文章浏览阅读3.4w次,点赞8次,收藏52次。adb connect命令利用TCP/IP协议来连接。adb连接设备有两种方式,本文尝试通过Wi-Fi无线连接设备进行调试。_adb connect

android判断clipdata否为uri,android.os.FileUriExposedException:file.jpg通过ClipData.Item.getUri()...-程序员宅基地

文章浏览阅读404次。//for imports check on bottom of this code blockpublic class HomeProfileActivity extends AppCompatActivity {//Button camerapublic static final String TAG = HomeProfileActivity.class.getSimpleName();pu..._clipdata geturi()==null

FreeRTOS实验_独立看门狗监视多线程-程序员宅基地

文章浏览阅读8.1k次,点赞12次,收藏56次。1.首先随意创建几个线程,如下图:2.然后就要思考了,怎么样实现如果其中一个线程死掉了,就不喂狗得以让系统重启? 其实,我们可以反过来想一下,什么情况下才喂狗得以让系统正常运行?答案是,所有线程都活着的时候。 那么我们就让所有线程每隔一段时间上报一次“我还活着”事件给监视程序,当监视程序发现其中一个线程在这段时间内没有上报“我还活着”事件时就停止_freertos实验_独立看门狗监视多线程

随便推点

android tv焦点特效实现浅析_android app控制电视焦点变化-程序员宅基地

文章浏览阅读1.1k次。Android TV上的焦点凸显特效相信大家都看到过,那么我们就来实现它吧,首先上张效果图。先说一下实现原理,主要通过重写RelativeLayout实现item,之后在其中加入scalanimation动画效果。刚开始处理时,还是发现了一些问题,比如item放大后会被其他item遮挡,如何添加选中边框等等,以及动画的实现等等。下面放上实现细节。首先是item的代码_android app控制电视焦点变化

pyside2读取图片时报错Process finished with exit code -1073740791 (0xC0000409)_eclipse exit code =-1073740791-程序员宅基地

文章浏览阅读681次,点赞2次,收藏4次。问题描述我用 Pycharm 在调用 pyside2 的 QIcon 读入本地图片文件时,将读取图片的代码移到了程序的最开头,结果程序无法运行。报错如下:Process finished with exit code -1073740791 (0xC0000409)因为没有任何有用的提示,只能拿这个错误码上网搜。根据网友说,这个报错是显存不足的问题。可是我只是小小地加载了个资源,不至于显存不足。所以具体问题还是要具体分析。最后,打开命令行窗口的方法帮助我解决了问题。解决方法1. 打开 Pycha_eclipse exit code =-1073740791

【WPS技能】xlsx表格根据单元格的值改变行背景色_wps表格 根据数值改变单元格背景色-程序员宅基地

文章浏览阅读6.5k次。关键公式:=INDIRECT("G"&ROW())="功能完成" 效果图: _wps表格 根据数值改变单元格背景色

实例 :手把手教你用PyTorch快速准确地建立神经网络(附4个学习用例)-程序员宅基地

文章浏览阅读1.2k次,点赞3次,收藏9次。作者:Shivam Bansal;翻译:陈之炎;校对:丁楠雅;本文约5600字,建议阅读30+分钟。本文中,我们将探讨PyTorch的全部内容。我们将不止学习理论,还包括..._self.conv1 = nn.conv2d[3, 16, 3]

机顶盒常用命令大全_机顶盒ttl命令大全-程序员宅基地

文章浏览阅读6.1k次,点赞2次,收藏18次。getprop persist.sys.hwconfig.stb_id —盒子ID信息 persist.sys.hwconfig.stb_id getprop prop.ots.virtual_ip —虚拟IP设置 android:sharedUserId=”android.uid.system” —应用作系统签名 screencap -p /mn..._机顶盒ttl命令大全

java excel相同的合并_Java使用Apache POI合并Excel连续相同内容的单元格-程序员宅基地

文章浏览阅读818次。环境:Apache POI 3.17;HSSFSheet;目的:对Excel表格中同一列,如果连续的两个或两个以上单元格的内容相同,则对这些单元格进行合并。实现代码:/*** 合并指定Excel sheet页、指定列中连续相同内容的单元格** @param sheet Excel sheet* @param column 指定列*/public static void mergeSpecifie..._poi对上下相同的文字进行合并

推荐文章

热门文章

相关标签