猿问

无法将结构指针分配给接口指针

结构体Dog实现了接口的所有方法Animal,为什么*Dos不能赋值给*Animal?


type Animal interface {

    run()

}


type Dog struct {

    name string

}


func (d *Dog) run() {

    fmt.Println( d.name , " is running")

}


func main(){

    var d *Dog

    var a *Animal


    d = new(Dog)

    d.run()

    a = d   //errors here

}

Go 通知以下错误:


Cannot use 'd' (type *Dog) as type *Animal in assignment


慕斯709654
浏览 130回答 3
3回答

MMTTMM

具有接口类型的变量已经是指针;您不需要将其声明为指向接口的指针。只要做var a Animal,它就会起作用。

30秒到达战场

您必须从界面中删除指针。//Animal interfacetype Animal interface {    run()}//Dog structtype Dog struct {    name string}func (d *Dog) run() {    fmt.Println(d.name, "is running")}func main() {    var d *Dog    var a Animal    d = new(Dog)    d.name = "Putty"    d.run()    a = d //errors here    a.run()}

萧十郎

Dog是一种类型,所以*Dog是。Dog不实现接口Animal,但是*Dog实现了。所以var a Animal = new(Dog)没关系。
随时随地看视频慕课网APP

相关分类

Go
我要回答