英文:
Type assertion errors when casting from interface to actual object
问题
遇到了以下示例中的类型断言错误。
错误:
> 49: 无法将 z(类型为 IZoo)转换为类型 Zoo:需要类型断言
>
> 49: 无法为 Zoo(z).animals 赋值
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{} // 无法将 z(类型为 IZoo)转换为类型 Zoo:需要类型断言
return z // 无法将 z(类型为 IZoo)作为类型 *Zoo 返回:需要类型断言
}
英文:
Encountering type assertion errors in the example below.
Errors:
> 49: cannot convert z (type IZoo) to type Zoo: need type assertion
>
> 49: cannot assign to Zoo(z).animals
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
}
答案1
得分: 2
错误消息已经说明了问题:你需要一个类型断言。
y := z.(Zoo)
y.animals = map[string]IAnimal{}
英文:
The error message says it all: you need a type assertion.
y := z.(Zoo)
y.animals = map[string]IAnimal{}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论