不要将带有 int64 的数据反序列化到 map[string]interface{} 中

本文探讨了在Go语言中将int64类型的值存储到map[string]interface{}时可能出现的精度丢失问题。由于Go语言内部机制,int64会被转换为float64,当遇到int64的最大值时,可能导致精度损失。这种情况在进行数据比较或查询时可能引发严重问题,例如查询用户企业失败。为了解决这个问题,建议将数据反序列化到特定结构体中,以保持数据的准确性。
摘要由CSDN通过智能技术生成

我们知道,在 Go 语言中,有一种 map 数据类型,当我们需要向哈希表中存入不确定类型的数据时,我们可能会用到 map[string]interface{}

m1 := make(map[string]interface{}, 0)
m1["name"] = "user1"
m1["age"] = 21
m1["weight"] = 130.5

当向其中存储一些数据后,当我们遍历它,就能拿到自己想要的结果:

for k, v := range m1 {
	fmt.Printf("%s-%s\n", k, v)
}

我们再看复杂一点的示例,服务 a,调用服务 b,获取用户信息。

服务 b 返回 json 给服务 a:{"name": "user1","userId":3,"orgId":202505060582035456}

// 服务 a 得到用户信息
// 经过服务内部的接口通讯,会对数据 json 序列化和反序列化:
json1 := `{"name": "user1","userId":3,"orgId":2025050605
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值