当嵌入类型具有UnmarshalJSON时,Unmarshal失败
我正在尝试解组一个具有嵌入类型的结构。当嵌入类型具有UnmarshalJSON方法时,外部类型的解组失败: 输出为:当嵌入类型具有UnmarshalJSON时,Unmarshal失败,json,go,unmarshalling,Json,Go,Unmarshalling,我正在尝试解组一个具有嵌入类型的结构。当嵌入类型具有UnmarshalJSON方法时,外部类型的解组失败: 输出为: Foo.UnmarshalJSON EmbeddedStruct.UnmarshalJSON Foo: &{{embeddedValue} } Unmarshal didn't work, Field value is . Should be 'value' 。。。因此,两个自定义解组函数都运行了。嵌入结构的值正确,但外部结构的值丢失 如果我们简单地删除Embedde
Foo.UnmarshalJSON
EmbeddedStruct.UnmarshalJSON
Foo: &{{embeddedValue} }
Unmarshal didn't work, Field value is . Should be 'value'
。。。因此,两个自定义解组函数都运行了。嵌入结构的值正确,但外部结构的值丢失
如果我们简单地删除EmbeddedStruct.UnmarshalJSON方法,它将按预期工作
我做错什么了吗?这是预期的吗?还是虫子?我确信有一种方法可以调整我的UnmarshalJSON方法,使其工作。这是意料之中的
创建别名时:
type Alias Foo
Alias
不会继承Foo
的方法,因为它是一种不同的类型,具有不同的方法集,这是您想要实现的,以避免无限递归
但是,embeddedEmbeddedStruct
的UnmarshalJSON
方法将被提升
因此,
Alias
将有一个UnmarshalJSON
方法,该方法将只解组EmbeddedStruct
的值,而不是使用您想要的默认解组。aaaaahh我明白了。谢谢@DavidBrophy我仍在试图弄清楚如何解决这个问题。如果我弄明白了,我会修改答案。但是,不客气:)是的,这里也一样!实际上,我刚刚发现了一个没有得出任何结论的重复问题:我通过复制整个encoding/json包并添加一个新函数“UnmarshalWithoutCustomUnmarshalers”来解决这个问题。这并不理想,但它工作得很好。。。我将在某个时候将代码推送到github。
type Alias Foo