前言
創(chuàng)新互聯(lián)專注于臨漳網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供臨漳營銷型網(wǎng)站建設(shè),臨漳網(wǎng)站制作、臨漳網(wǎng)頁設(shè)計(jì)、臨漳網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務(wù),打造臨漳網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供臨漳網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
在golang中,當(dāng)浮點(diǎn)數(shù)超過一定數(shù)值的時(shí)候,golang會把它弄成科學(xué)計(jì)數(shù)法的形式進(jìn)行顯示(好像只要大于七位數(shù)就變成科學(xué)計(jì)數(shù)法了)
var val float64 val = 1000000 fmt.Println(val) // ==> 1e+06
而在日常開發(fā)中,我們經(jīng)常遇到這樣一個(gè)問題,就是要反序列化前端傳遞來的json,因?yàn)閿?shù)據(jù)結(jié)構(gòu)未知,所以我們便會使用map[string]interface{}
來接收反序列化的結(jié)果。由于golang將json解析到interface{}
類型的時(shí)候,遵循如下規(guī)則
所以如果我們接收到的json中存在一個(gè)比較大的數(shù)字,那么它就會被解析成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í)候如果把它傳遞給前端使用的話,那么前端是有可能會報(bào)錯(cuò)的。所以我們最好還是保持這個(gè)數(shù)字的原始字符串表現(xiàn)形式。即使用json.Number
類型來表示
所以換成如下代碼就可以了
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é)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對創(chuàng)新互聯(lián)的支持。