接口
什么是 interface
提到接口,我们会联想到汽车的接口,也就是让司机如何操作汽车按自己意愿使用,用户界面也是接口,会联想到很多很多。接口看了很多,对初学者比较难理解,但是一旦理解了并可以灵活运用了,接口 power 还是很大的。
接口可以理解是规范、协议、用户使用手册和对类型抽象,对行为描述。说了这么一大堆还需要您自己了解。
In object-oriented programming, a protocal or interface is a common means for unrelated objects to communicate with each other
wikipedia
上面的话摘字 wiki,这里传递了两个信息
- communicate 接口是用于通讯,接口就是用来定义通讯遵循的规则
- unrelated objects 没有关系的对象,接口定义通讯规则可以使用两个互不相干的对象。
乐高玩具就是一个好的例子。乐高玩具的一个piece 组合时只要遵守尺寸规则,无论大小和颜色就可以组合在一起进行拼接。
以后兼职工作也是一样只要满足规定的条件,在拼接 Lego 玩具时是否可以拼接是和piece 的颜色和形状没有关系的,只要他们都遵守一定尺寸就可以进行拼接。在软件控制模块搭建和通讯也是通过定义一定接口规范来实现了。我想软件工程也在某些方面借鉴传统的行业。
那么什么是 go 的 interface
- abstract types
- concrete types
当然在 go 语言中有很多种类型,不过我们大致可以将归为两种一种类型属于abstract类型(抽象类型)和concrete类型(实体类型)
concrete 类型
- 用于描述类型在内存中分配情况
int8/int16/int32/int64/struct/float - 使用方法赋予数据一定的行为
type Number int
func (n Number) Positive() bool{
return n >0
}
abstract 类型
抽象类型并没定义描述如何为这种类型分配内存空间,而是描述类型的行为。按行为为类型进行划分。这些抽象类型有io.Reader
、io.Writer
和fmt.String
等等
type Positiver interface{
Positive() bool
}
用来说明 go 语言接口的经典接口 Writer 和 Reader 接口
type Reader interface{
Read(b []byte)(int,error)
}
type Writer interface{
Writer(b []byte)(int,error)
}
只要实现了接口的方法的类型就属于接口类型,所以集合是普通类型的集合。我们接口是可以组合,但是接口越详细确定范围也就小 weak
type ReadWriter interface{
Read
Writer
}
这里有一个 interface{}
Rob Pike 指着interface{}
是没有任何意思,因为没有任何限制,没有限制也就是没有意义,这个应该不难理解
有疑问加站长微信联系(非本文作者)