V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
linvon
V2EX  ›  问与答

咨询一个 Golang 的 easyjson 的问题

  •  
  •   linvon · Jul 9, 2020 · 675 views
    This topic created in 2122 days ago, the information mentioned may be changed or developed.

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

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

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

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2131 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:48 · PVG 08:48 · LAX 17:48 · JFK 20:48
    ♥ Do have faith in what you're doing.