当前位置: 首页 > news >正文

个人网站开发 怎么赚钱吗女生做sem专员的工作难吗

个人网站开发 怎么赚钱吗,女生做sem专员的工作难吗,哈尔滨网页设计与制作,设计公司logo要多少钱【Golang】Json 无法表示 float64 类型的 NaN 以及 Inf 导致的 panic 原因 golang 服务出现了 panic,根据 panic 打印出的堆栈找到了问题代码,看上去原因是:json 序列化时,遇到了无法序列化的内容 [panic]: json: unsupported …

【Golang】Json 无法表示 float64 类型的 NaN 以及 Inf 导致的 panic

原因

golang 服务出现了 panic,根据 panic 打印出的堆栈找到了问题代码,看上去原因是:json 序列化时,遇到了无法序列化的内容

[panic]: json: unsupported value: NaN or Infinite

在这里插入图片描述

NaN 以及 Infinite

解释:基本可以判断出:NaN 以及 Inf 是 float64 类型的两种特例,Json 无法表示这类数据,故 panic在这里插入图片描述

深度剖析

查阅 log 看到,这里最原始的 NaN 其实是字符串"NaN",明明是字符串,是如何将 "NaN"转变为 float64 的呢?问题出在使用的 cast 包的 ToFloat64上
在这里插入图片描述
可以从 ToFloat64 的源码中看到,当需要转换成 float64 的类型是 string 或者 json.Number 时,调用的都是 strconv.ParseFloat 函数(s.Float64 本质也是调用该函数),继续阅读 strconv.ParseFloat,我们可以在strconv/atof.go文件中看到以下代码:strconv.ParseFloat 会将字符串 NaN 以及 Inf 转换为 float64 类型的 NaN 以及 Inf。 而 json 无法处理这两种数据,会直接 panic在这里插入图片描述

修复

单独判断下即可

func SetValWhenFloatIsNaNOrInf(val float64) float64 {if math.IsNaN(val) {return 0.00}if math.IsInf(val, 0) {return 100.00}return val
}

扩展

NaN 和 Inf 怎么来的呢
在这里插入图片描述
在 float64 类型中,我们可以通过 zero/zero 来得到 NaN,也可以用过 除零 操作来得到 Inf,在 Google 并没有得到能解释这两种常量存在的原因,只从二进制浮点数算术标准(IEEE 754)看到有相关的定义在这里插入图片描述
能否把 NaN 以及 Inf 作为 map 的 key?
测试代码

func TestNaNKeyMap() {m := make(map[float64]struct{}, 0)for i := 0; i < 10; i++ {m[math.NaN()] = struct{}{}fmt.Printf("nan map len:%d\n", len(m))}
}
func TestInfKeyMap() {m := make(map[float64]struct{}, 0)for i := 0; i < 10; i++ {m[math.Inf(0)] = struct{}{}fmt.Printf("inf map len:%d\n", len(m))}
}

结果:可以看待对于 NaN,每次赋值的时候,其实都是给不同的 key 赋值,而 Inf 则不是;所以我们可以得出以下结论:map[float64]struct 这种以 float64 为 key 的 map,存在内存泄漏的可能
在这里插入图片描述
map 的 key 都会经过 hash,然后再确定value 存储的位置,那么问题大概率出在 hash 算法上,在 runtime/alg.go 找到以下函数:在这里插入图片描述
可以看到,算法里判断到 f != f 时,会给hash 值增加一个随机数,并且注释里也说了是为了适配 any kind of NaN
这里 f != f 的判断也同时用在 func IsNaN(f float64) (is bool) 函数中。

http://www.shuangfujiaoyu.com/news/7808.html

相关文章:

  • 网站怎么做站群百度热词指数
  • 做网站需要交维护费么百度推广工作好干吗
  • 西宁网站建设官网广告免费发布信息
  • 更换wordpress字体深圳纯手工seo
  • 重庆网站建设哪家公司那家好seo和sem
  • html网站列表怎么做广州网站推广
  • 可信网站图标软文文章
  • 学校网站的目的在线优化seo
  • 松岗做网站联系电话自己做网站
  • 白银做网站的董事怎样建立网站免费的
  • 网站搭建哪家好营业推广策略有哪些
  • 建设了网站怎么管理系统小程序开发公司前十名
  • 动态网站技术采用什么架构小红书笔记关键词排名优化
  • 做网站要租服务器吗整站优化深圳
  • 网站开发人员 平均工资代写文章多少钱
  • 国外炫酷网站设计win优化大师官网
  • 软件开发工具包括郑州seo建站
  • 网站搭建 保定百度seo效果
  • 苏州新区网站建设谷歌google 官网下载
  • 网站做缓存吗软文营销的技巧有哪些
  • 房山区住房和城乡建设委员会网站百度关键词排名突然没了
  • 龙胜做网站的公司长沙关键词优化方法
  • 做养生的网站多吗seo排名点击软件推荐
  • 昆明哪有做网站的百度seo流量
  • wordpress网站全过程网站页面优化方法
  • thinkphp建站网址seo整站优化新站快速排名
  • 南通高端网站建设公司域名备案查询官网
  • 企业收录网站有什么用廊坊seo网站管理
  • 黄冈网站建设与推广哪家好网站优化推广价格
  • 酉阳网站制作站长统计工具