Go 从接口强制转换到实际对象时出现类型断言错误
在下面的示例中遇到类型断言错误 错误: 49:无法将z(类型IZoo)转换为类型Zoo:需要类型断言 49:无法分配给动物园(z)。动物Go 从接口强制转换到实际对象时出现类型断言错误,go,type-assertion,Go,Type Assertion,在下面的示例中遇到类型断言错误 错误: 49:无法将z(类型IZoo)转换为类型Zoo:需要类型断言 49:无法分配给动物园(z)。动物 错误消息说明了一切:您需要一个 你不能一行完成吗?我们需要单独的声明和assignment@user2727195z.(动物园)。动物=你认为这个表达式应该做什么?它所做的-它创建了一个临时对象,该对象将在该语句之后被丢弃。因此,有一个问题:为您无法访问的对象字段指定值意味着什么?您基本上可以删除该行,并且观察到的程序行为不会改变。@zerkms文档中是否有关
错误消息说明了一切:您需要一个
你不能一行完成吗?我们需要单独的声明和assignment@user2727195
z.(动物园)。动物=
你认为这个表达式应该做什么?它所做的-它创建了一个临时对象,该对象将在该语句之后被丢弃。因此,有一个问题:为您无法访问的对象字段指定值意味着什么?您基本上可以删除该行,并且观察到的程序行为不会改变。@zerkms文档中是否有关于此临时对象的解释?我不确定。这是一个通用的知识结构,在Go作业时复制。为了澄清,Go作业中的所有内容都是作业时复制的。
type IAnimal interface {}
type IZoo interface {}
type Zoo struct {
animals map[string]IAnimal
}
func NewZoo() *Zoo {
var z IZoo = &Zoo{}
Zoo(z).animals = map[string]IAnimal{} // cannot convert z (type IZoo) to type Zoo: need type assertion
return z // cannot use z (type IZoo) as type *Zoo in return argument: need type assertion
}
y := z.(Zoo)
y.animals = map[string]IAnimal{}