Go-接口与面向对象
接口(interface)
接口是一组方法签名的集合,定义了类型应实现的行为。实现是隐式的:只要类型具有接口所需方法,就实现
该接口。
定义格式
1 | type 接口名 interface { |
例如
1 | type Stringer interface { |
接口与面向对象
Go的面向对象包含三大要素:接口、方法、结构体
定制接口 - 接口要求方法 - 存在方法满足接口要求 - struct存储信息 - 调用接口
方法需要结构体作为接受者,也就是结构体与方法是“封装”一步的关键
如图
多接口
代码实现
1 | type 接口名 interface {// 定义一个接口 |
多态
通过用不同类型实现同一接口,可以实现接口的多态表现解耦
通过接口定义依赖关系,降低模块之间的耦合区别于Java类OOP式面向对象的Is-a关系,Go的Can-do关系不要求强制存在父类、子类和方法之间的访问修饰符定义等强耦合关系
泛化
使用空借口interface{}可表示任意类型空接口
空接口 interface{} 可以表示任何类型
1 | var x interface{} |
类型断言与类型选择
- 类型断言获取具体类型或判断类型:
1 | var v interface{} = "abc" |
- 类型开关:
1 | switch t := v.(type) { |
泛型(any)
与空接口类似,可以表示任何类型
不同的是,空接口在编译时容易发生类型安全错误,需要频繁类型断言
而泛型any会自动保证编译时类型安全,编译器会为每个使用的具体类型生成一份特化代码
拓展知识之后会逐渐接触