linvon
V2EX  ›  问与答

咨询一个 Golang 的 easyjson 的问题

  •  
  •   linvon · Jul 9, 2020 · 707 views
    This topic created in 2138 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   ·   2956 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 15:20 · PVG 23:20 · LAX 08:20 · JFK 11:20
    ♥ Do have faith in what you're doing.