最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談golang的json.Unmarshal的坑

 更新時間:2023年01月05日 08:55:18   作者:知魚君  
本文主要介紹了淺談golang的json.Unmarshal的坑,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

最近在golang業(yè)務(wù)開發(fā)時,遇到一個坑。

我們有個服務(wù),會接收通用的interface對象,然后去給用戶發(fā)消息。因此會涉及到把各個業(yè)務(wù)方傳遞過來的字符串,轉(zhuǎn)成interface對象。

但是因?yàn)槲业淖址镉幸粋€數(shù)字,比如下面demo里的{"number":1234567},而且數(shù)字是7位數(shù),在經(jīng)過json.Unmarshal后,被轉(zhuǎn)成了科學(xué)計數(shù)法的形式,導(dǎo)致私信發(fā)出的鏈接出現(xiàn)異常,結(jié)果報錯了。

package main

import (
   "encoding/json"
   "fmt"
)

func main() {
   jsonStr := `{"number":1234567}`
   result := make(map[string]interface{})
   err := json.Unmarshal([]byte(jsonStr), &result)
   if err != nil {
      fmt.Println(err)
   }
   fmt.Println(result) // map[number:1.234567e+06]

}

當(dāng)數(shù)據(jù)結(jié)構(gòu)未知,使用 map[string]interface{} 來接收反序列化結(jié)果時,如果數(shù)字的位數(shù)大于 6 位,都會變成科學(xué)計數(shù)法,用到的地方都會受到影響。

encoding/json包中,可以找到下面一段注釋:

//
// To unmarshal JSON into an interface value,
// Unmarshal stores one of these in the interface value:
//
// bool, for JSON booleans
// float64, for JSON numbers
// string, for JSON strings
// []interface{}, for JSON arrays
// map[string]interface{}, for JSON objects
// nil for JSON null
//

對于數(shù)字來說,會被解析成 float64 類型,就有可能會出現(xiàn)科學(xué)計數(shù)法的形式。

問題解決方案1:強(qiáng)制類型轉(zhuǎn)換

func main() {
   jsonStr := `{"number":1234567}`
   result := make(map[string]interface{})
   err := json.Unmarshal([]byte(jsonStr), &result)
   if err != nil {
      fmt.Println(err)
   }
   fmt.Println(int(result["number"].(float64)))

   // 輸出
   // 1234567
}

問題解決方案2:盡量避免使用 interface,對 json 字符串結(jié)構(gòu)定義結(jié)構(gòu)體

func main() {
   type Num struct {
      Number int `json:"number"`
   }

   jsonStr := `{"number":1234567}`
   var result Num
   err := json.Unmarshal([]byte(jsonStr), &result)
   if err != nil {
      fmt.Println(err)
   }
   fmt.Println(result)

   // 輸出
   // {1234567}
}

參考文檔:http://www.fzitv.net/article/190537.htm

到此這篇關(guān)于淺談golang的json.Unmarshal的坑的文章就介紹到這了,更多相關(guān)golang json.Unmarshal內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang中基礎(chǔ)的命令行模塊urfave/cli的用法說明

    Golang中基礎(chǔ)的命令行模塊urfave/cli的用法說明

    這篇文章主要介紹了Golang中基礎(chǔ)的命令行模塊urfave/cli的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • goland 實(shí)現(xiàn)websocket server的示例代碼

    goland 實(shí)現(xiàn)websocket server的示例代碼

    本文主要介紹了goland 實(shí)現(xiàn)websocket server的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Go 語言 select 的實(shí)現(xiàn)原理解析

    Go 語言 select 的實(shí)現(xiàn)原理解析

    select是Go在語言層面提供的I/O多路復(fù)用的機(jī)制,其專門用來讓Goroutine同時等待多個channel是否準(zhǔn)備完畢:可讀或可寫,這篇文章主要介紹了Go 語言 select 的實(shí)現(xiàn)原理,需要的朋友可以參考下
    2025-01-01
  • 通過client-go來操作K8S集群的操作方法

    通過client-go來操作K8S集群的操作方法

    本文詳細(xì)介紹了client-go的安裝、配置和使用方法,并通過示例代碼展示了如何進(jìn)行常見的Kubernetes操作,希望這些內(nèi)容能幫助大家更好地理解和使用client-go,從而提高你的Kubernetes開發(fā)效率,感興趣的朋友一起看看吧
    2024-11-11
  • Go?gRPC服務(wù)proto數(shù)據(jù)驗(yàn)證進(jìn)階教程

    Go?gRPC服務(wù)proto數(shù)據(jù)驗(yàn)證進(jìn)階教程

    這篇文章主要為大家介紹了Go?gRPC服務(wù)proto數(shù)據(jù)驗(yàn)證進(jìn)階教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • go 異常處理panic和recover的簡單實(shí)踐

    go 異常處理panic和recover的簡單實(shí)踐

    在Go語言中,異常處理主要通過panic和recover這兩個內(nèi)建函數(shù)來實(shí)現(xiàn),本文主要介紹了go異常處理panic和recover的簡單實(shí)踐,具有一定的參考價值,感興趣的可以了解一下
    2025-04-04
  • Golang指針隱式間接引用詳解

    Golang指針隱式間接引用詳解

    在 Go中,指針隱式解引用是指通過指針直接訪問指針?biāo)赶虻闹担恍枰@式地使用 * 運(yùn)算符來解引用指針,這篇文章主要介紹了Golang指針隱式間接引用,需要的朋友可以參考下
    2023-05-05
  • Golang?中的?unsafe.Pointer?和?uintptr詳解

    Golang?中的?unsafe.Pointer?和?uintptr詳解

    這篇文章主要介紹了Golang中的unsafe.Pointer和uintptr詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • Go處理JSON數(shù)據(jù)的實(shí)現(xiàn)

    Go處理JSON數(shù)據(jù)的實(shí)現(xiàn)

    本文主要介紹了Go處理JSON數(shù)據(jù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 詳解Go語言微服務(wù)開發(fā)框架之Go chassis

    詳解Go語言微服務(wù)開發(fā)框架之Go chassis

    分布式系統(tǒng)中每個進(jìn)程的動態(tài)配置管理及運(yùn)行時熱加載就成為了一個亟待解決的問題。go chassis汲取了netflix的archaius框架經(jīng)驗(yàn),并做出來自己的創(chuàng)新特性。
    2021-05-05

最新評論

易门县| 益阳市| 泸西县| 横山县| 南丰县| 镇坪县| 东台市| 钟祥市| 建水县| 托里县| 怀宁县| 西安市| 疏附县| 张掖市| 福鼎市| 湘潭市| 巴马| 枣阳市| 汕头市| 察隅县| 永昌县| 西和县| 西充县| 韶关市| 项城市| 攀枝花市| 沙雅县| 海林市| 外汇| 卓尼县| 武宣县| 垫江县| 通城县| 本溪市| 海晏县| 东乌珠穆沁旗| 科尔| 上思县| 津南区| 许昌县| 昔阳县|