技术标签: 《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),是一位音视频技术爱好者,同时也是程序员宅基地专家、华为云社区云享专家、签约作者,欢迎关注我分享更多干货!
文章浏览阅读2.2k次。今天在开发的过程中遇到了一个Redis的问题: 当你在redis中插入一个key值,并且设置了对应过期时间. 当过期时间还没到的时候重新 更新 key值会导致 过期时间被刷新, 针对这个问题: 我查看了下redis的官方文档, 他们是这么解释的:The timeout will only be cleared by commands that delete or overwrite the con..._更新redis的值过期时间刷新了
文章浏览阅读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.._一个月学算法
文章浏览阅读3.4w次,点赞8次,收藏52次。adb connect命令利用TCP/IP协议来连接。adb连接设备有两种方式,本文尝试通过Wi-Fi无线连接设备进行调试。_adb connect
文章浏览阅读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
文章浏览阅读8.1k次,点赞12次,收藏56次。1.首先随意创建几个线程,如下图:2.然后就要思考了,怎么样实现如果其中一个线程死掉了,就不喂狗得以让系统重启? 其实,我们可以反过来想一下,什么情况下才喂狗得以让系统正常运行?答案是,所有线程都活着的时候。 那么我们就让所有线程每隔一段时间上报一次“我还活着”事件给监视程序,当监视程序发现其中一个线程在这段时间内没有上报“我还活着”事件时就停止_freertos实验_独立看门狗监视多线程
文章浏览阅读1.1k次。Android TV上的焦点凸显特效相信大家都看到过,那么我们就来实现它吧,首先上张效果图。先说一下实现原理,主要通过重写RelativeLayout实现item,之后在其中加入scalanimation动画效果。刚开始处理时,还是发现了一些问题,比如item放大后会被其他item遮挡,如何添加选中边框等等,以及动画的实现等等。下面放上实现细节。首先是item的代码_android app控制电视焦点变化
文章浏览阅读681次,点赞2次,收藏4次。问题描述我用 Pycharm 在调用 pyside2 的 QIcon 读入本地图片文件时,将读取图片的代码移到了程序的最开头,结果程序无法运行。报错如下:Process finished with exit code -1073740791 (0xC0000409)因为没有任何有用的提示,只能拿这个错误码上网搜。根据网友说,这个报错是显存不足的问题。可是我只是小小地加载了个资源,不至于显存不足。所以具体问题还是要具体分析。最后,打开命令行窗口的方法帮助我解决了问题。解决方法1. 打开 Pycha_eclipse exit code =-1073740791
文章浏览阅读6.5k次。关键公式:=INDIRECT("G"&ROW())="功能完成" 效果图: _wps表格 根据数值改变单元格背景色
文章浏览阅读1.2k次,点赞3次,收藏9次。作者:Shivam Bansal;翻译:陈之炎;校对:丁楠雅;本文约5600字,建议阅读30+分钟。本文中,我们将探讨PyTorch的全部内容。我们将不止学习理论,还包括..._self.conv1 = nn.conv2d[3, 16, 3]
文章浏览阅读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命令大全
文章浏览阅读818次。环境:Apache POI 3.17;HSSFSheet;目的:对Excel表格中同一列,如果连续的两个或两个以上单元格的内容相同,则对这些单元格进行合并。实现代码:/*** 合并指定Excel sheet页、指定列中连续相同内容的单元格** @param sheet Excel sheet* @param column 指定列*/public static void mergeSpecifie..._poi对上下相同的文字进行合并