在编程语言和类型论中,多态指为不同数据类型的实体提供统一的接口。 -wiki
package main
import "fmt"
type notifier interface{
notify()
}
type user struct{
name string
email string
}
func (u *user) notify() {
fmt.Printf("Sending user email to %s<%s>\n", u.name, u.email)
}
type admin struct{
name string
email string
}
func (a * admin) notify(){
fmt.Printf("Sending admin email to %s<%s>\n", a.name, a.email)
}
func main(){
bill := user{"Bill", "[email protected]"}
sendNotification(&bill)
lisa:= admin{"Lisa", "[email protected]"}
sendNotification(&lisa)
}
func sendNotification(n notifier){
n.notify()
}
在代码5-7行,我们创建了一个notifier接口,并且在该接口中声明了一个notify方法。
在9-12行,我们声明了一个结构体user。user具有两个字段,一个是string类型的name,另外一个是email。18-21行我们声明了另外一个结构体admin。
14-16行,我们声明了接收者为user的notify方法,因为notifier接口只有norify方法,所以user结构体即实现了notifier接口。23-25行admin结构体同样也声明了notify方法,实现了notifier接口。
在35-37行,我们声明了sendNotification方法,该方法接收一个notifier类型的值,并且在方法体内部调用了notify方法。
28-33行声明的main函数是程序的入口,首先我们初始化了一个user用户,然后我们接着声明了一个admin用户。在29行我们调用了sendNotification方法,传入了bill,此时调用了user结构体声明的notify方法,输出Sending user email to Bill