为了账号安全,请及时绑定邮箱和手机立即绑定

指针接收器混淆

指针接收器混淆

Go
拉丁的传说 2021-11-01 17:02:43
我对以下代码的行为感到困惑。操场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}}我不明白为什么第三个调用json.Encoder.Encode能够访问,json.RawMessage.MarshalJSON即使它不是指针。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信