国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

網站開發(fā) 實戰(zhàn)今日十大熱點新聞頭條

網站開發(fā) 實戰(zhàn),今日十大熱點新聞頭條,江蘇百城建設有限公司官方網站,哪個素材網站比較好用【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"轉變?yōu)?float64 的呢?問題出在使用的 cast 包的 ToFloat64上
在這里插入圖片描述
可以從 ToFloat64 的源碼中看到,當需要轉換成 float64 的類型是 string 或者 json.Number 時,調用的都是 strconv.ParseFloat 函數(s.Float64 本質也是調用該函數),繼續(xù)閱讀 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://aloenet.com.cn/news/31242.html

相關文章:

  • 手機網站制作服務機構想做網站找什么公司
  • 如何做自媒體和網站簽約賺點擊用asp做的網站
  • 怎樣給自己的網站做防紅連接佛山百度關鍵詞排名
  • 襄陽企業(yè)網站建設國際最新消息
  • 網站制作的知識推廣項目的平臺
  • 什么網站做跨境電子商務信息流廣告優(yōu)秀案例
  • php 網站開發(fā)收費客戶資源買賣平臺
  • 網站做淘客百度seo自然優(yōu)化
  • 專業(yè)推廣網站wordpress網站建設
  • 在線作圖免費網站升華網絡推廣軟件
  • ui怎樣做網站海南百度推廣代理商
  • 網站內容不顯示旅游網站的網頁設計
  • 網站建設與管理代碼搜索百度指數
  • 網站建設系統(tǒng)網頁設計主要做什么
  • 紅旗h5寧波seo教程app推廣
  • 免費營銷軟件網站建設國際新聞 軍事
  • 專門做圖片是網站重慶企業(yè)網站排名優(yōu)化
  • 全椒縣城鄉(xiāng)建設局網站營銷型網站分析
  • 淘寶店鋪裝網站導航怎么做百度手機網頁
  • 淘客怎么樣做網站網絡營銷的手段有哪些
  • wordpress垃圾文章如何將網站的關鍵詞排名優(yōu)化
  • 重慶微信網站建設做網站seo推廣公司
  • 一般網站用什么軟件做網站seo優(yōu)化技能
  • 網上銷售上海網絡seo
  • 設計常去的網站推廣網站制作
  • 建立健全黨支部按期換屆提醒督促seo崗位
  • 企業(yè)信息網站模板可以入侵的網站
  • 做游戲還是做網站好百度seo怎么關閉
  • wordpress 做外貿站上海seo網站排名優(yōu)化公司
  • 做茶葉網站哪些平臺可以發(fā)廣告