亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

golang中json反序列化可能遇到的問(wèn)題

 更新時(shí)間:2018年01月12日 11:19:49   作者:youyu歲月  
這篇文章主要給大家介紹了關(guān)于golang中json反序列化可能遇到的問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。

前言

在golang中,當(dāng)浮點(diǎn)數(shù)超過(guò)一定數(shù)值的時(shí)候,golang會(huì)把它弄成科學(xué)計(jì)數(shù)法的形式進(jìn)行顯示(好像只要大于七位數(shù)就變成科學(xué)計(jì)數(shù)法了)

var val float64
val = 1000000
fmt.Println(val) // ==> 1e+06

而在日常開發(fā)中,我們經(jīng)常遇到這樣一個(gè)問(wèn)題,就是要反序列化前端傳遞來(lái)的json,因?yàn)閿?shù)據(jù)結(jié)構(gòu)未知,所以我們便會(huì)使用map[string]interface{}來(lái)接收反序列化的結(jié)果。由于golang將json解析到interface{}類型的時(shí)候,遵循如下規(guī)則

  • bool 代表 JSON booleans,
  • float64 代表 JSON numbers,
  • string 代表 JSON strings,
  • nil 代表 JSON null.

所以如果我們接收到的json中存在一個(gè)比較大的數(shù)字,那么它就會(huì)被解析成float64類型的,并且有可能顯示為科學(xué)計(jì)數(shù)法的形式,比如下面這個(gè)例子

package main
import (
 "encoding/json"
 "fmt"
)

func main() {
 //Create the Json string
 var data = `
 {
 "id": 12423434, 
 "Name": "Fernando"
 }
 `

 //Marshal the json to a map
 var result map[string]interface{}
 err := json.Unmarshal([]byte(data), &result)
 if err != nil {
 fmt.Println(err.Error())
 return
 }
 fmt.Println(result)
}

輸出如下結(jié)果

map[id:1.2423434e+07 Name:Fernando]

這個(gè)時(shí)候如果把它傳遞給前端使用的話,那么前端是有可能會(huì)報(bào)錯(cuò)的。所以我們最好還是保持這個(gè)數(shù)字的原始字符串表現(xiàn)形式。即使用json.Number類型來(lái)表示

所以換成如下代碼就可以了

package main
import (
 "encoding/json"
 "fmt"
 "strings"
)

func main() {
 //Create the Json string
 var data = `
 {
 "id": 12423434, 
 "Name": "Fernando"
 }
 `
 //Marshal the json to a map
 var result map[string]interface{}
 d := json.NewDecoder(strings.NewReader(data))
 d.UseNumber()
 err := d.Decode(&result)
 if err != nil {
 fmt.Println(err.Error())
 return
 }
 // 此刻result["id"]的類型就是json.Number了 它的底層類型其實(shí)就是string
 fmt.Println(result)
}

輸出如下結(jié)果

map[id:12423434 Name:Fernando]

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Golang實(shí)現(xiàn)KV存儲(chǔ)引擎實(shí)例探究

    Golang實(shí)現(xiàn)KV存儲(chǔ)引擎實(shí)例探究

    這篇文章主要為大家介紹了Golang實(shí)現(xiàn)KV存儲(chǔ)引擎實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Go調(diào)度器學(xué)習(xí)之協(xié)作與搶占詳解

    Go調(diào)度器學(xué)習(xí)之協(xié)作與搶占詳解

    如果某個(gè)G執(zhí)行時(shí)間過(guò)長(zhǎng),其他的G如何才能被正常調(diào)度,這就引出了接下來(lái)的話題:協(xié)作與搶占。本文將通過(guò)一些示例為大家詳細(xì)講講調(diào)度器中協(xié)作與搶占的相關(guān)知識(shí),需要的可以參考一下
    2023-04-04
  • Golang開發(fā)之接口的具體使用詳解

    Golang開發(fā)之接口的具體使用詳解

    在 Golang 中,接口是一種類型,它是由一組方法簽名組成的抽象集合。這篇文章主要為大家介紹了Golang接口的具體使用,希望對(duì)大家有所幫助
    2023-04-04
  • Go語(yǔ)言學(xué)習(xí)筆記之golang操作MongoDB數(shù)據(jù)庫(kù)

    Go語(yǔ)言學(xué)習(xí)筆記之golang操作MongoDB數(shù)據(jù)庫(kù)

    MongoDB是Nosql中常用的一種數(shù)據(jù)庫(kù),這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言學(xué)習(xí)筆記之golang操作MongoDB數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • golang實(shí)現(xiàn)RPC模塊的示例

    golang實(shí)現(xiàn)RPC模塊的示例

    本文詳細(xì)介紹了在Go語(yǔ)言中如何實(shí)現(xiàn)RPC模塊,包括RPC服務(wù)端和客戶端的構(gòu)建及代碼實(shí)現(xiàn),同時(shí)提到了使用JSON-RPC的方法,通過(guò)簡(jiǎn)單的步驟,可以實(shí)現(xiàn)跨進(jìn)程的遠(yuǎn)程過(guò)程調(diào)用,感興趣的可以了解一下
    2024-09-09
  • 初探Golang數(shù)據(jù)結(jié)構(gòu)之Slice的使用

    初探Golang數(shù)據(jù)結(jié)構(gòu)之Slice的使用

    在學(xué)習(xí)Go語(yǔ)言時(shí),一直對(duì)數(shù)組和切片的使用場(chǎng)景好奇,不明白為什么推薦使用切片來(lái)代替數(shù)組,所以本文就來(lái)和大家梳理一下Slice切片的相關(guān)知識(shí)吧
    2023-09-09
  • Go?1.21新內(nèi)置函數(shù)min、max和clear的用法詳解

    Go?1.21新內(nèi)置函數(shù)min、max和clear的用法詳解

    Go?1.21?版本已經(jīng)正式發(fā)布,它帶來(lái)了許多新特性和改進(jìn),其中引入了的三個(gè)新內(nèi)置函數(shù):max、min?和?clear,接下來(lái)我們就來(lái)看看這些函數(shù)的用途和特點(diǎn)吧
    2023-08-08
  • VsCode搭建Go語(yǔ)言開發(fā)環(huán)境的配置教程

    VsCode搭建Go語(yǔ)言開發(fā)環(huán)境的配置教程

    這篇文章主要介紹了在VsCode中搭建Go開發(fā)環(huán)境的配置教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Go語(yǔ)言服務(wù)器開發(fā)之客戶端向服務(wù)器發(fā)送數(shù)據(jù)并接收返回?cái)?shù)據(jù)的方法

    Go語(yǔ)言服務(wù)器開發(fā)之客戶端向服務(wù)器發(fā)送數(shù)據(jù)并接收返回?cái)?shù)據(jù)的方法

    這篇文章主要介紹了Go語(yǔ)言服務(wù)器開發(fā)之客戶端向服務(wù)器發(fā)送數(shù)據(jù)并接收返回?cái)?shù)據(jù)的方法,實(shí)例分析了客戶端的開發(fā)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • golang 字符串拼接性能的對(duì)比分析

    golang 字符串拼接性能的對(duì)比分析

    這篇文章主要介紹了golang 字符串拼接性能的對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12

最新評(píng)論