Go不是严格意义上的面向对象编程语言,理解Go的接口、多态和继承的特性和编程思想,才能正确地用好它,这门被称为“互联网时代的C语言”。
接口类型
Go的slice、map等是具体类型,一个具体类型可以准确地描述它代表的值,还可以通过具体类型操作内置方法。
接口类型,是一种抽象的类型,它不会暴露它所代表的对象的内部值和对象支持的操作方法。接口只会通过声明方法(行为)来展示它是用来做什么,并不知道它具体是什么。
实现接口
一个类型如果要拥有一个接口的方法,就要实现这个接口。
- 接口是用来定义行为(方法)的类型。被定义的行为不由接口直接实现,而是由用户定义的类型来实现它的方法。
- 如果用户定义的类型实现了接口类型声明的一组方法,那么用户类型的值就可以赋值给这个接口类型的值。
- 对接口值的方法的调用,会执行接口值存储的用户定义类型的值对应的方法。
多态
多态是指代码可以根据类型的具体实现采取不同行为的能力。
因为任何用户定义的类型都可以实现任何接口,所以通过不同实体类型对接口值方法的调用就是多态。
继承
通过将struct的字段里面声明为匿名字段(所有内置类型和自定义类型),能够实现对字段以及字段类型实现的方法的继承。