我對以下代碼的行為感到困惑。操場var foo json.RawMessage_ = json.Unmarshal([]byte(`{ "zoo": 123 }`), &foo)enc := json.NewEncoder(os.Stdout)// Works as expected_ = enc.Encode(struct{ Foo *json.RawMessage }{&foo})// MarshalJSON has a pointer reciever, so it doesn't get invoked here_ = enc.Encode(struct{ Foo json.RawMessage }{foo})// How is MarshalJSON being invoked if .Foo is not a pointer?_ = enc.Encode(&struct{ Foo json.RawMessage }{foo})輸出:{"Foo":{"zoo":123}}{"Foo":"eyAiem9vIjogMTIzIH0="}{"Foo":{"zoo":123}}我不明白為什么第三個調(diào)用json.Encoder.Encode能夠訪問,json.RawMessage.MarshalJSON即使它不是指針。
- 1 回答
- 0 關(guān)注
- 148 瀏覽
添加回答
舉報
0/150
提交
取消