今天线上出现了一个很奇怪的问题,简单讲就是某个比较通用的服务反序列化 JSON 的时候,发现有些 int64 的 ID 解开之后不是预期的数字。
废话不多说!直接上代码!不看答案,你能知道输出什么吗?
package main
import (
"encoding/json"
"fmt"
"log"
"sync"
"time"
)
type Msg struct {
DrId int `json:"drid"`
}
type Data struct {
Msg interface{} `json:"msg"`
}
func main() {
msg := Msg{DrId: 21041079142844926}
data := Data{Msg: msg}
str2, _ := json.Marshal(data)
// 1. {"msg":{"drid":21041079142844926}}
fmt.Println(string(str2))
var data2 Data
_ = json.Unmarshal(str2, &data2)
// fmt.Println(data2)
str3, _ := json.Marshal(data2)
// 2. ?
fmt.Println(string(str3))
}