1 回答
TA贡献1835条经验 获得超7个赞
问题很简单,结构的id字段CreateMessage未导出,它以小写字母开头。将其更改为:
type CreateMessage struct {
Id int
}
它会起作用。
笔记:
既然message2已经是一个指针( new(CreateMessage)),你就不必将它的地址传给json.Unmarshal(),它的值就足够了:
var message2 = new(CreateMessage)
if err := json.Unmarshal(message.Data, message2); err != nil {
panic(err)
}
log.Printf("%+v", message2)
输出:
2009/11/10 23:00:00 &{Id:5}
或者根本不使用new():
var message2 CreateMessage
if err := json.Unmarshal(message.Data, &message2); err != nil {
panic(err)
}
log.Printf("%+v", message2)
输出:
2009/11/10 23:00:00 {Id:5}
在Go Playground上试一试。
另请注意,现在字段的名称是"Id"和 JSON 包含,"id"但json包“智能”足以匹配它们(与"Event"和相同"event")。但是要知道,如果您尝试编组结构,输出将包含"Id"而不是"id".
如果要使用完全不同的字段名称或确保在编组结构时将其小写,则可以使用结构标记来说明它应如何出现在 JSON 文本中,例如:
type CreateMessage struct {
MyId int `json:"id"`
}
- 1 回答
- 0 关注
- 205 浏览
添加回答
举报