我可以帮您翻译成中文。这篇文章讨论如何编排/解析包含非公开字段的结构体,但如何处理混合字段呢?
假设有一个结构体:
我该如何编写MarshalJSON/UnmarshalJSON函数,以便fieldA与FieldB和FieldC一起传输?
以下代码可以编译,但在运行时会溢出调用堆栈。我的猜测是我正在递归地编组对象,但我不确定如何在编码时保留导出和未导出字段。
假设有一个结构体:
type Test struct {
fieldA string `json:"fieldA"`
FieldB int `json:"fieldB"`
FieldC string `json:"fieldC"`
}
我该如何编写MarshalJSON/UnmarshalJSON函数,以便fieldA与FieldB和FieldC一起传输?
以下代码可以编译,但在运行时会溢出调用堆栈。我的猜测是我正在递归地编组对象,但我不确定如何在编码时保留导出和未导出字段。
func (t *Test) MarshalJSON() ([]byte, error) {
return json.Marshal(struct {
*Test
FieldA string `json:"fieldA"`
}{
t,
t.fieldA,
})
}
func (t *Test) UnmarshalJSON(b []byte) error {
return json.Unmarshal(b, &t)
}
有没有办法做到这一点?还是我需要重新考虑我的数据结构,也许只是导出该字段?
注意:我知道我可以手动处理每个字段,但如果可能的话,我想避免这样做,以使更新代码更加可管理。