我有一个来自api as map[message:Login Success. userid:1]的json响应.

服务器:

c.JSON(200, gin.H{"message": "Login Success.", "userid": 1})

客户端:

var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)

msg, ok := result["message"].(string)
if !ok {
    msg = "Something went wrong."
}
userID, ok := result["userid"].(int)
if !ok {
    userID = 0
}

但是userID, ok := result["userid"].(int)总是失败的.我甚至试过使用:

switch v := x.(type) {
case nil:
    fmt.Println("x is nil")          
case int: 
    fmt.Println("x is", v)           
case bool, string:
    fmt.Println("x is bool or string")
default:
    fmt.Println("type unknown")      
}

它只给了我unknown美元.为什么整数不被视为整数?


看起来它将该值视为float64.

推荐答案

你可以在这里找到为什么你会得到float64分而不是int分的原因:

判断文档中是否有Decode

有关将JSON转换为Go值的详细信息,请参阅Unmarshal文档.

还有see

要将JSON解组为接口值,解组会在接口值中存储以下内容之一:

float64, for JSON numbers

Go相关问答推荐

你能帮我优化一个golang代码关于函数CrossPointTwoRect

在Uber FX中实现后台进程正常关闭的正确方式是什么?

重新赋值变量时未清除动态类型-这是错误吗?

如何使redis池的等待超时

如何使用 AWS sdk 在 Go 中正确解组 PartiQL 查询的结果?

如何创建在responseWriter.Write 上返回错误的http.ResponseWriter 模拟实例?

通过 Terraform 中的 MapNestedAtribute 进行迭代

如何解决构建Docker Compose时的权限被拒绝问题

如何在 Go 中将 int 转换为包含 complex128 的泛型类型?

Golang 中的泛型类型转换

创建新对象后如何返回嵌套实体?

Go 的垃圾收集器在使用时删除 ZeroMQ 套接字

致命错误 - 所有 Goroutines 都睡着了!僵局

regex.ReplaceAll 但如果替换则添加相同数量的字符

go version -m 输出中的箭头符号=>是什么意思?

为超时的单元测试创​​建 deadlineExceededError:true

如何使用 math/big 对 bigInt 进行取模?

无法在 GORM 中排序

在 golang 中联合一个接口和类型

使用不安全的指针从 [] 字符串中获取值