标签 "interface" 下的文章

今天线上出现了一个很奇怪的问题,简单讲就是某个比较通用的服务反序列化 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))
}

阅读全文