咨询一个 Golang 的 easyjson 的问题
資深大佬 : linvon 7
昨天在查一个 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 的序列化就没办法将新增加的字段序列化进去,但取值仍是能取到的。
想问一下这是一种正常的现象吗? 还是说我的使用姿势有问题?
如果是正常现象的话,有没有什么好办法可以规避的?
大佬有話說 (0)