1. 什么是多态
多态是指根据类型的具体实现采取不同行为的能力。如果某个类型实现了某个接口,那么所有使用这个接口的地方,都可以支持这种类型的值。即不同的数据类型的实体实现提供统一的接口。Go中没有类的概念,它的多态是靠接口来实现的。
2. 在Go中的实现
先定义一个抽象的接口,这个接口规定了结构体应当实现什么方法,比如:
//定义一个eater接口,只要某个结构体实现了这个接口的全部方法,即实现了这个接口 type eater interface { eat() }
定义一个通用的函数,这个函数的传入参数接收一个接口类型:
//eating函数接收一个eater接口 func eating(e eater) { e.eat() }
对上述的接口做两个实现
type people struct { name string age int } //people 结构体实现了eat方法,即实现了eater接口的所有方法,因此people实现了eater接口 func (p *people) eat() { fmt.Printf("%v is eating\n",p.name) } type dog struct { name string hoster string age int } //dog 结构体也实现了eater接口 func (d *dog) eat() { fmt.Printf("%v is eating, its hoster is %v\n", d.name,d.hoster) }
在调用时即可直接调用eating函数,在程序运行时,就可以动态地将接口指向具体的类型,如下:
func main() { x := &dog{ name : "xiaobai", age : 3, hoster : "dahei", } d := &people{ name: "dahei", age : 16, } eating(x) //调用eating函数,将x传入,程序可以在运行时动态地把eater接口指向dog类型,从而调用dog的方法。 eating(d) }标签:eating,语言,实现,eater,多态,接口,dog,Go,name From: https://www.cnblogs.com/beatle-go/p/17707551.html