为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕斯709654 2023-06-05 17:03:56
结构体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
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

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



查看完整回答
反对 回复 2023-06-05
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

您必须从界面中删除指针。



//Animal interface

type Animal interface {

    run()

}


//Dog struct

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.name = "Putty"

    d.run()

    a = d //errors here

    a.run()

}


查看完整回答
反对 回复 2023-06-05
?
萧十郎

TA贡献1815条经验 获得超13个赞

Dog是一种类型,所以*Dog是。

Dog不实现接口Animal,但是*Dog实现了。

所以var a Animal = new(Dog)没关系。


查看完整回答
反对 回复 2023-06-05
  • 3 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信