将接口转换为实际对象时出现类型断言错误。

huangapple go评论74阅读模式
英文:

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{}

huangapple
  • 本文由 发表于 2017年3月12日 07:29:49
  • 转载请务必保留本文链接:https://go.coder-hub.com/42741920.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定