昨天在查一个 bug,结构体里明明存在了值,但 json 序列化后就是没有,查到今天发现是 easyjson 没有更新,具体情况是这样的:
type A struct {
W *string `json:"w"`
}
type B struct {
*A
}
member := &A{
W: goproto.String("123"),
}
bytes, err := json.Marshal(member)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(string(bytes)) //{"w":"123"}
}
param := &B{member}
bytes, err = json.Marshal(param)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(string(bytes)) //{}
}
其中 A 和 B 两个 Struct 都是由 easyjson 生成的,这样每次更新 A 时,都会去重新用 easyjson 生成。但问题在于 B 可能在不同的包里,并不知道 A 更新了,或者更新 A 的时候忘记更新 B,这个时候使用 easyjson 的序列化就没办法将新增加的字段序列化进去,但取值仍是能取到的。
想问一下这是一种正常的现象吗? 还是说我的使用姿势有问题?
如果是正常现象的话,有没有什么好办法可以规避的?