Go语言中的接口

   日期:2020-05-06     浏览:87    评论:0    
核心提示:1、接口时用来定义行为的类型对接口值方法的调用会执行接口值里存储的用户定义的类型的值对应的方法eg:

1、接口是用来定义行为的类型

对接口值方法的调用会执行接口值里存储的用户定义的类型的值对应的方法

eg:

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)
}

func main() {
	u := user{"miller", "1089795101@qq.com"}

	sendNotification(&u)
}

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

2、方法集定义了接口的接受规则

因为不是总能获取一个值的地址,所以值的方法集只包括了使用值接收者实现的方法。

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)
}

func main() {
	u := user{"miller", "1089795101@qq.com"}
	//传值会报错
	sendNotification(u)
}

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

报错:\TestInterface.go:23:18: cannot use u (type user) as type notifier in argument to sendNotification:
    user does not implement notifier (notify method has pointer receiver)

改:

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)
}

func main() {
	u := user{"miller", "1089795101@qq.com"}
	//传值会报错
	sendNotification(u)
}

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

3、多态

package main

import "fmt"

//定义了通知类行为的接口
type notifier interface {
	notify()
}

//user在程序里定义了一个用户类型
type user struct {
	name string
	email string
}
// notify 使用指针接收者实现了notifier接口
func (u *user) notify() {
	fmt.Printf("Sending user email to %s<%s>\n",
		u.name,
		u.email)
}

//定义了程序里的管理员
type admin struct {
	name string
	email string
}

//使用指针接收者实现notifier接口
func (a *admin) notify() {
	fmt.Printf("Sending admin email to %s<%s>\n",
	a.name,
	a.email)
}

func main() {
	u := user{"miller", "1089795101@qq.com"}
	a := admin{"bob","american.cn"}
	//传值会报错
	sendNotification(&u)
	sendNotification(&a)
}

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

 

函数 

sendNotification接收一个实现了notifier接口的值作为参数,这个函数能够实现多态的行为。
 
标签: 文章标签: go
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服