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

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

而在日常開(kāi)發(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?interface{}的底層原理實(shí)現(xiàn)

    深入了解Golang?interface{}的底層原理實(shí)現(xiàn)

    在?Go?語(yǔ)言沒(méi)有泛型之前,接口可以作為一種替代實(shí)現(xiàn),也就是萬(wàn)物皆為的?interface。那到底?interface?是怎么設(shè)計(jì)的底層結(jié)構(gòu)呢?下面咱們透過(guò)底層分別看一下這兩種類型的接口原理。感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助
    2022-10-10
  • Golang 如何限制木馬圖片上傳服務(wù)器的實(shí)例

    Golang 如何限制木馬圖片上傳服務(wù)器的實(shí)例

    本文主要介紹了Golang 如何限制木馬圖片上傳服務(wù)器的實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • GO語(yǔ)言中回調(diào)函數(shù)的使用

    GO語(yǔ)言中回調(diào)函數(shù)的使用

    本文主要介紹了GO語(yǔ)言中回調(diào)函數(shù)的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 手把手教你vscode配置golang開(kāi)發(fā)環(huán)境的步驟

    手把手教你vscode配置golang開(kāi)發(fā)環(huán)境的步驟

    這篇文章主要介紹了手把手教你vscode配置golang開(kāi)發(fā)環(huán)境的步驟,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Go操作mongodb數(shù)據(jù)庫(kù)方法示例

    Go操作mongodb數(shù)據(jù)庫(kù)方法示例

    這篇文章主要為大家介紹了Go操作mongodb數(shù)據(jù)庫(kù)方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Go語(yǔ)言之結(jié)構(gòu)體與方法

    Go語(yǔ)言之結(jié)構(gòu)體與方法

    這篇文章主要介紹了Go語(yǔ)言之結(jié)構(gòu)體與方法,結(jié)構(gòu)體是由一系列具有相同類型或不同類型的數(shù)據(jù)構(gòu)成的數(shù)據(jù)集合。下面我們就一起來(lái)學(xué)習(xí)什么是Go語(yǔ)言之結(jié)構(gòu)體
    2021-10-10
  • Go操作Kafka和Etcd方法詳解

    Go操作Kafka和Etcd方法詳解

    這篇文章主要為大家介紹了Go操作Kafka和Etcd方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Golang?urfave/cli庫(kù)簡(jiǎn)單應(yīng)用示例詳解

    Golang?urfave/cli庫(kù)簡(jiǎn)單應(yīng)用示例詳解

    這篇文章主要為大家介紹了Golang?urfave/cli庫(kù)簡(jiǎn)單應(yīng)用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Go打包附件內(nèi)容到執(zhí)行文件的方法

    Go打包附件內(nèi)容到執(zhí)行文件的方法

    處于種種原因, 我們不希望這部分額外的內(nèi)容以附件的形式出現(xiàn), 有沒(méi)有什么辦法能夠?qū)⒏郊?nèi)容直接打包進(jìn)可執(zhí)行文件中呢,下面小編給大家介紹下Go打包附件內(nèi)容到執(zhí)行文件的方法,感興趣的朋友一起看看吧
    2023-03-03
  • GO中高效的將int轉(zhuǎn)換為string的方法與源碼

    GO中高效的將int轉(zhuǎn)換為string的方法與源碼

    本文將從逐步介紹幾種在?Go?中將?int?轉(zhuǎn)換為?string?的常見(jiàn)方法,并重點(diǎn)剖析這幾種方法在性能上的特點(diǎn),另外,還會(huì)重點(diǎn)介紹?FormatInt?高效的算法實(shí)現(xiàn),需要的朋友可以參考下
    2024-01-01

最新評(píng)論

贡山| 谷城县| 满洲里市| 永胜县| 元谋县| 博客| 马关县| 鄢陵县| 南投市| 松潘县| 南丰县| 孟连| 枣庄市| 凉山| 桃源县| 秦安县| 龙海市| 芒康县| 寻乌县| 梧州市| 望都县| 连云港市| 佛冈县| 井研县| 靖远县| 扎鲁特旗| 绍兴县| 太湖县| 乾安县| 辽源市| 肃宁县| 环江| 乌拉特前旗| 津南区| 松桃| 天气| 美姑县| 甘洛县| 安庆市| 南昌县| 河池市|