为什么 Golang json.Unmarshall 不能使用“e”和“E”属性?

Den*_*zke -1 json go

假设我们想要解组 JSON 字符串{"e": "foo", "E": 1}

使用类型进行解组的messageUppercaseE工作方式与预期一致。但是,当使用该类型时,会返回message错误。json: cannot unmarshal number into Go struct field message.e of type string

  1. "e"如果只存在 struct 标记,为什么我们无法解组 JSON ?
  2. 我怎样才能解组 JSON?(我知道我可以通过Jeffail/gabs做到这一点,但想坚持使用基于类型的方法。)
type message struct {
    EventType string `json:"e"`
}

type messageUppercaseE struct {
    EventType  string `json:"e"`
    UppercaseE uint64 `json:"E"`
}
Run Code Online (Sandbox Code Playgroud)

亲自尝试一下https://play.golang.org/p/T6KMJRLy7TN

Bur*_*dar 5

引用解组文档:

要将 JSON 解组为结构,Unmarshal 会将传入对象键与 Marshal 使用的键(结构体字段名称或其标记)进行匹配,首选完全匹配,但也接受不区分大小写的匹配。

在这种情况下,正是不区分大小写的匹配导致了问题。