在使用Go語言進行Json解析時,經常會遇到將int解析成0的情況。這是因為Json中的int類型默認為64位有符號整數,而Go語言的int則有可能是32位或64位的類型。
如果Json中的int值過大超過了Go語言中int類型的取值范圍,解析時會將int解析成0。
type MyData struct { MyInt int } func main() { var data MyData jsonData := []byte(`{"MyInt":9223372036854775808}`) err := json.Unmarshal(jsonData, &data) if err != nil { panic(err) } fmt.Println(data) }
在上面的代碼中,Json中的int值9223372036854775808超出了Go語言中int類型的最大值,解析后MyData中的MyInt就會被解析成0。
解決此問題的方法是將Json中的int類型解析成int64類型,保證與Go語言中的int類型一致,代碼如下:
type MyData struct { MyInt int64 } func main() { var data MyData jsonData := []byte(`{"MyInt":9223372036854775808}`) err := json.Unmarshal(jsonData, &data) if err != nil { panic(err) } fmt.Println(data) }
通過將MyInt類型定義為int64,可以正確將Json中的int類型解析成Go語言中的int64類型,解決int為0的問題。
下一篇vue chalk報錯