结构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
答案 0 :(得分:3)
具有接口类型的变量已经是一个指针;您无需将其声明为指向接口的指针。只要执行var a Animal
,它就会起作用。
答案 1 :(得分:1)
必须从接口中删除指针。
//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()
}
答案 2 :(得分:-1)
Dog
是一种类型,所以*Dog
是一种类型。
Dog
不实现接口Animal
,但实现*Dog
。
所以var a Animal = new(Dog)
是确定。