Go接口

接口

多态是指代码可以根据类型的具体的实现采取不同行为的能力。如果一个类型实现了某个接口,所有使用这个接口的地方,,都可以支持这种类型的值。标准库里面有很好的例子
如io包里实现的流式处理接口。

在程序的声明和实现接口是会涉及很多细节。即便实现的是已有接口,也需要了解这些接口是如何工作的。

实现

接口是用来定义行为类型的,这些被定义的行为不由接口直接实现,而是通过方法由用户定义的类型实现。如果用户定义的某个接口类型声明一组方法,
那么这个用户定义的类型值就可以赋值给这个接口的类型值,。这个赋值会把用户定义的类型值存入接口类型的值。

对接口值方法的调用会执行接口值里面存储的用户定义的类型值对应的方法。因为任何用户定了的类型都可以实现接口,所以对接口值方法调用是一种自然的多态
。在这个关系里面,用户定于的类型通常叫做实体类型,原因是如果离开内部存储的用户定义的类型的值得实现,接口值没有具体的行为。

方法集

package main

import "fmt"

type notifier interface {
	notify()
}

type user struct {
	name string
	email string
}

func (u *user) notify() {
	fmt.Printf("Sending Email to %s<%s>\n", u.name, u.email)
}

func sendNotification(n notifier) {
	n.notify()
}

func main() {

	u := user{"peter", "peter@qq.com"}
	sendNotification(&u)

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值