Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当嵌入类型具有UnmarshalJSON时,Unmarshal失败_Json_Go_Unmarshalling - Fatal编程技术网

当嵌入类型具有UnmarshalJSON时,Unmarshal失败

当嵌入类型具有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

我正在尝试解组一个具有嵌入类型的结构。当嵌入类型具有UnmarshalJSON方法时,外部类型的解组失败:

输出为:

Foo.UnmarshalJSON
EmbeddedStruct.UnmarshalJSON
Foo: &{{embeddedValue} }
Unmarshal didn't work, Field value is . Should be 'value'
。。。因此,两个自定义解组函数都运行了。嵌入结构的值正确,但外部结构的值丢失

如果我们简单地删除EmbeddedStruct.UnmarshalJSON方法,它将按预期工作

我做错什么了吗?这是预期的吗?还是虫子?我确信有一种方法可以调整我的UnmarshalJSON方法,使其工作。

这是意料之中的

创建别名时:

type Alias Foo
Alias
不会继承
Foo
的方法,因为它是一种不同的类型,具有不同的方法集,这是您想要实现的,以避免无限递归

但是,embedded
EmbeddedStruct
UnmarshalJSON
方法将被提升


因此,
Alias
将有一个
UnmarshalJSON
方法,该方法将只解组
EmbeddedStruct
的值,而不是使用您想要的默认解组。

aaaaahh我明白了。谢谢@DavidBrophy我仍在试图弄清楚如何解决这个问题。如果我弄明白了,我会修改答案。但是,不客气:)是的,这里也一样!实际上,我刚刚发现了一个没有得出任何结论的重复问题:我通过复制整个encoding/json包并添加一个新函数“UnmarshalWithoutCustomUnmarshalers”来解决这个问题。这并不理想,但它工作得很好。。。我将在某个时候将代码推送到github。
type Alias Foo