为了账号安全,请及时绑定邮箱和手机立即绑定

将 JSON 整数解组为空接口会导致错误的类型断言

将 JSON 整数解组为空接口会导致错误的类型断言

Go
GCT1015 2022-03-03 16:05:20
我有这个代码。我希望接口的类型断言为 int。但是,接口的类型改为 float64。谁能解释为什么会这样?以及规避它的最佳方法是什么。package mainimport (    "fmt"    "encoding/json")type obj struct {    X interface{}}func main() {    var x int    x = 5    o := &obj {        X: x,    }    b, _ := json.Marshal(o)    var newObj obj    json.Unmarshal(b, &newObj)    if _, ok := newObj.X.(int); ok {        fmt.Println("X is an int")    } else if _, ok := newObj.X.(float64); ok {        fmt.Println("X is a float64")    } else {        fmt.Println("This does not make any sense")    }}此代码打印“X 是 float64”。您可以在那里运行代码https://play.golang.org/p/9L9unW8l3n
查看完整描述

1 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

数字被编码为“Json 数字” Unmarshal 将 Json 数字解码为浮点数。从文档:

元帅

浮点、整数和数字值编码为 JSON 数字。

解组

为了将 JSON 解组为接口值,Unmarshal 将其中一项存储在接口值中:

bool,对于 JSON 布尔值 float64,对于 JSON 数字字符串,对于 JSON 字符串 []interface{},对于 JSON 数组 map[string]interface{},对于 JSON 对象 nil 对于 JSON null


查看完整回答
反对 回复 2022-03-03
  • 1 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号