前言
看【Go语言实战】这本书第二遍了,看第一遍的时候只是留下个印象,为了加深记忆以及方便回顾,把自己的理解写出来,仅供参考,Go Go Go,开始
定义
接口是用来定义行为的类型。这些被定义的行为不由接口直接实现,而是通过方法由用户 定义的类型实现。如果用户定义的类型实现了某个接口类型声明的一组方法,那么这个用户定 义的类型的值就可以赋给这个接口类型的值。这个赋值会把用户定义的类型的值存入接口类型 的值。
值接受者与指针接受者
1、如果参数类型是指针,那么在调用的时候也必须传递指针地址,因为编译器不是总能自动获取一个值的地址
2、如果参数类型是值,那调用的时候传值或者指针都可以,因为通过指针可以获取到对应的值
接口实现多态的方式
1、定义一个接口,接口中定义一个方法,所有想要实现该接口的类型,必须先实现接口中的方法
2、定义一个类型,并为该类型以接收者方式实现【步骤1】中的接口方法
3、声明一个多态方法,接收的参数类型为【步骤1】中定义的接口类型
4、调用该多态方法,并把【步骤2】中定义的类型作为参数传递给【步骤3】中声明的多态方法,由多态方法来调用接口方法
具体代码如下:
package main
func main() {
u := user{
"dabao",
"baojun3@staff.weibo.com",
}
//调用多态方法notification
notification(u)
//嵌入类型 使用嵌入类型可以实现继承,admin中内部类型user的方法也被提升到了外部类型admin
admin := admin{
user{
"张三",
"zhangsan@aa.com",
},
"level",
}
notification(admin)
}
//定义一个接口
type notifier interface {
notify()
}
//定义一个user类型
type user struct {
name string
email string
}
//定义一个admin类型,将user类型嵌入
type admin struct {
user
level string
}
//user类型实现notifier接口
func (u user) notify() {
println("通过接口实现多态调用notify方法:" + u.name)
}
//声明一个多态方法
func notification(n notifier) {
n.notify()
}
有疑问加站长微信联系(非本文作者)