咨询一个 Golang 的 easyjson 的问题

2020-07-09 10:56:02 +08:00
 linvon

昨天在查一个 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 的序列化就没办法将新增加的字段序列化进去,但取值仍是能取到的。

想问一下这是一种正常的现象吗? 还是说我的使用姿势有问题?

如果是正常现象的话,有没有什么好办法可以规避的?

544 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/688469

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX