V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
linvon
V2EX  ›  问与答

咨询一个 Golang 的 easyjson 的问题

  •  
  •   linvon · 2020-07-09 10:56:02 +08:00 · 543 次点击
    这是一个创建于 1908 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    目前尚无回复
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5028 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 05:45 · PVG 13:45 · LAX 22:45 · JFK 01:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.