dongzong8110 2013-06-21 07:08
浏览 19
已采纳

向切片添加结构的指针

I'm trying to add a pointer to a struct to a slice, but I can't get rid of this error:

cannot use NewDog() (type *Dog) as type *Animal in append:
    *Animal is pointer to interface, not interface

How can I avoid this error? (while still using pointers)

package main

import "fmt"

type Animal interface {
  Speak()
}

type Dog struct {
}

func (d *Dog) Speak() {
  fmt.Println("Ruff!")
}

func NewDog() *Dog {
  return &Dog{}
}

func main() {
  pets := make([]*Animal, 2)
  pets[0] = NewDog()
  (*pets[0]).Speak()
}
  • 写回答

2条回答 默认 最新

  • drvjlec1767 2013-06-21 07:36
    关注
    package main
    
    import "fmt"
    
    type Animal interface {
      Speak()
    }
    
    type Dog struct {
    }
    
    func (d *Dog) Speak() {
      fmt.Println("Ruff!")
    }
    
    func NewDog() *Dog {
      return &Dog{}
    }
    
    func main() {
      pets := make([]Animal, 2)
      pets[0] = NewDog()
      pets[0].Speak()
    }
    

    You don't need a Slice of pointers to Animal interfaces.

    http://golang.org/doc/effective_go.html#pointers_vs_values

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看