假设我们想要解组 JSON 字符串{"e": "foo", "E": 1}。
使用类型进行解组的messageUppercaseE工作方式与预期一致。但是,当使用该类型时,会返回message错误。json: cannot unmarshal number into Go struct field message.e of type string
"e"如果只存在 struct 标记,为什么我们无法解组 JSON ?type message struct {
EventType string `json:"e"`
}
type messageUppercaseE struct {
EventType string `json:"e"`
UppercaseE uint64 `json:"E"`
}
Run Code Online (Sandbox Code Playgroud)
引用解组文档:
要将 JSON 解组为结构,Unmarshal 会将传入对象键与 Marshal 使用的键(结构体字段名称或其标记)进行匹配,首选完全匹配,但也接受不区分大小写的匹配。
在这种情况下,正是不区分大小写的匹配导致了问题。