Go 从接口强制转换到实际对象时出现类型断言错误

Go 从接口强制转换到实际对象时出现类型断言错误,go,type-assertion,Go,Type Assertion,在下面的示例中遇到类型断言错误 错误: 49:无法将z(类型IZoo)转换为类型Zoo:需要类型断言 49:无法分配给动物园(z)。动物 错误消息说明了一切:您需要一个 你不能一行完成吗?我们需要单独的声明和assignment@user2727195z.(动物园)。动物=你认为这个表达式应该做什么?它所做的-它创建了一个临时对象,该对象将在该语句之后被丢弃。因此,有一个问题:为您无法访问的对象字段指定值意味着什么?您基本上可以删除该行,并且观察到的程序行为不会改变。@zerkms文档中是否有关

在下面的示例中遇到类型断言错误

错误:

49:无法将z(类型IZoo)转换为类型Zoo:需要类型断言

49:无法分配给动物园(z)。动物


错误消息说明了一切:您需要一个


你不能一行完成吗?我们需要单独的声明和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{}