结构体
结构体内嵌
使用结构体内嵌是一种面向对象编程思想中的继承关系
1 | type Book struct { |
结构体方法
方法和函数比较像,区别在于函数属于包,通过包调用函数;方法属于结构体,通过结构体变量调用
1 | func (变量名 结构体类型) 方法名(参数列表) (返回值列表) { |
接口
GO语言接口是方法的集合,使用接口是实现模块化的重要方式
接口的创建与实现
接口是用来定义行为类型的,这些被定义的行为不由接口直接实现,而是通过方法由用户定义的类型实现,一个实现了这些方法的具体类型被称为接口的实例
接口中声明完方法后,结构体重写接口中所有的方法,即认为结构体实现了接口
1 | type Transport interface { |
上面代码创建了一个
Transport
的接口,结构体defaultTransport
实现了Transport
接口中的所有方法,即认为defaultTransport
实现了Transport
接口,defaultTransport
就是Transport
接口的实例
多态
同一件事情由于条件不同产生的结果不同即为多态,多态在代码层面最常见的一种方式是接口作为方法参数
1 | type Live interface { |
结构体实现了接口的全部方法,就认为结构体属于接口类型,这时可以把结构体变量赋值给接口变量
上面需要注意的一点是,方法集如果使用的是指针类型(如
p *People
)那么必须传入指针类型的值;如果方法集使用的是值类型(如p People
)那么可以传入指针类型的值也可以传入值类型的值