Go语言interface(接口)的作用
示例代码
package mainimport "fmt"type Computer interface {CalculatorPlay(string) string
}type Calculator interface {Open(string) CalculatorSay(string) stringAdd(uint, uint)Sum(int, int) int
}type TOM struct {Name stringAge intBob *BOBn int
}type BOB struct {TOMMyName string
}func (t *TOM) Open(s string) Calculator {if s == "" {return t}return t.Bob
}func Test(c Calculator) {}func (t *TOM) Say(string) string {return "I am " + t.Name
}func (t *TOM) Add(a, b uint) {fmt.Println(a + b)
}func (t *TOM) Sum(a, b int) int {return a + b
}func (t *TOM) Play(s string) string {return s
}func (b *BOB) Say(string) string {return "My Name is " + b.MyName
}func main() {b := new(BOB)b.MyName = "Bob"t := new(TOM)t.Name = "Tom"t.Age = 12fmt.Println(t.Say(""))Test(b)Test(t)
}
上面的例子中,定义了两个接口Calculator
和Computer
,两个结构体TOM
和BOB
,TOM
实现了接口Calculator
,而BOB
里面嵌套了TOM
,所以也实现了接口Calculator
,而接口Computer
里面嵌套了Calculator
,所以Computer
也实现了Calculator
。
在Go语言中接口(interface)常常被用来当做某个函数的参数传递,也有时候,接口被用来当做返回值类型,
参数传递
比如上面的例子
func Test(c Calculator) {}
Open(string) Calculator
func (t *TOM) Open(s string) Calculator {if s == "" {return t}return t.Bob
}
函数Test(c Calculator)
的参数类型是接口Calculator
,这是什么意思呢,函数TEST()
该如何调用呢,意思就是,当一个函数或方法的参数类型是一个接口时,哪个struct()实现了该接口,那么这个结构体对象,就可以被当做参数传递。
结构体TOM
和BOB
都实现了接口Calculator
,所以他们的对象可以被当做参数被传递到Test()里面,
b := new(BOB)
b.MyName = "Bob"
t := new(TOM)
t.Name = "Tom"
t.Age = 12
fmt.Println(t.Say(""))
Test(b)
Test(t)
返回值类型
上面有一个方法Open()
,它的返回值是一个接口Calculator
,这个意思就是只要哪个struct实现了接口Calculator
,那么该结构体对象就可以被当做参数返回
func (t *TOM) Open(s string) Calculator {if s == "" {return t}return t.Bob
}
TOM
和BOB
都实现了接口Calculator
,所以他们都可以被作为Open()
的返回值返回。
struct(结构体)嵌套
在使用结构体嵌套时要注意,当结构体BOB
里面嵌套了TOM
的时候,结构体TOM
里面还可以将BOB
作为某个变量的字段类型,但是TOM
里面不可以再嵌套BOB
,否则就存在循环递归调用,也就是出现了死循环。
Go语言interface(接口)的作用相关推荐
- Go语言-Go interface 接口的最佳实践
文章目录 Go语言-Go 接口的最佳实践 什么是Golang中的interface 编写接口的最佳实践 1. 保持interfaces足够小 2. Interfaces Should Have No ...
- C#中理解接口以及接口的作用
在C#的开发中,接口是非常重要也非常好用的.可是很多时候很多人都不是很了解接口的做用,以及该如何使用.下面我们就来理解接口的作用,并看看如何使用吧. 假设我们公司有两种程序员:VB程序员,指的是用VB ...
- Java接口的作用和意义是什么?
接口的定义 接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被内部修改而不影响外界其他实体与其交互的方式. 人类与电脑等信息机器或人类与程序之间的 ...
- Go 分布式学习利器(10)-- Go语言的接口
文章目录 1. 接口与依赖 2. 自定义类型 1. 接口与依赖 在上一节中我们讨论Go语言的面向对象特性的时候也说了,Go语言并不支持继承,能够进行对象的封装(包括数据成员和成员函数的封装),那么这里 ...
- 【Go语言】【14】GO语言的接口类型
1.什么是接口? 在面向对象的语言中,接口是用来限制实现类行为的.怎么理解这句话呢? 定义一个Person接口,我只会站在我的角度上考虑问题,比如Person(人),自然想到会吃饭.睡觉等: inte ...
- interface接口_golang 基础(Four) 接口进阶
参考 Understanding Go Interface 感谢 francesc 分享 接口 我们编程中少不了对接口使用和设计,无论你是使用哪种语言或多或少都会使用到**接口**.即使你说明重来没有 ...
- java的知识点13——多态、对象的转型(casting)、final关键字、抽象方法和抽象类、接口的作用、如何定义和使用接口?、接口的多继承、面向接口编程
多态 多态指的是同一个方法调用,由于对象不同可能会有不同的行为.现实生活中,同一个方法,具体实现会完全不同. 多态的要点: 1. 多态是方法的多态,不是属性的多态(多态与属性无关). 2. 多态的存在 ...
- java 接口的作用和好处
1.java 接口的作用 http://blog.csdn.net/hack_bug/article/details/7634737 2.一位Java大牛的回答 很多JAVA初级程序员对于接口存在的意 ...
- interface接口实例
C++标准中是没有接口interface的,但是我们在MFC的程序中经常可以看到接口的影子,我就自己查阅的资料和理解,做一个总结把. 首先,在objBase.h里面,有interface的定义 #de ...
最新文章
- php多表存储,php – MySql在一个单元格中存储另一个表的多个引用并选择它?
- Java项目:网上电商项目(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)
- Openstack 中的消息总线 AMQP
- 开发日记-20190509
- android中获取版本号,如何获取Android应用程序的构建/版本号?
- heroku能用mysql吗_heroku连接到mysql数据库
- 一张A4纸的牛B变化(你能吗?)
- php str_replace多个参数,php str_replace()函数的用法,有那些参数?
- Python学习笔记之头部文件
- RHCE 学习笔记(5)- 本地用户和组的管理
- android桌面快捷网页,Android向桌面添加快捷方式,使其指向特定的网页
- 阿里播放器的使用Aliplayer
- docker 安装 mysql ,redis ,nginx,tomcat,rabbitmq,fastdfs,kafka,mongo,elasticsearch
- 理性分析:那些吃蝙蝠的人,根本动机是什么?
- webservice axis2+spring整合
- office2010打开excel文档时为空白的解决方法
- 《Microduino实战》——3.4 重新认识软件与硬件
- oracle当天八点,oracle实现动态查询前一天早八点到当天早八点的数据功能示例
- docker 容器设置自动重启
- G2553与F5529串口