Go不是严格意义上的面向对象编程语言,理解Go的接口、多态和继承的特性和编程思想,才能正确地用好它,这门被称为“互联网时代的C语言”。

接口类型

Go的slice、map等是具体类型,一个具体类型可以准确地描述它代表的值,还可以通过具体类型操作内置方法。

接口类型,是一种抽象的类型,它不会暴露它所代表的对象的内部值和对象支持的操作方法。接口只会通过声明方法(行为)来展示它是用来做什么,并不知道它具体是什么。

实现接口

一个类型如果要拥有一个接口的方法,就要实现这个接口。

  • 接口是用来定义行为(方法)的类型。被定义的行为不由接口直接实现,而是由用户定义的类型来实现它的方法。
  • 如果用户定义的类型实现了接口类型声明的一组方法,那么用户类型的值就可以赋值给这个接口类型的值。
  • 对接口值的方法的调用,会执行接口值存储的用户定义类型的值对应的方法。

多态

多态是指代码可以根据类型的具体实现采取不同行为的能力。

因为任何用户定义的类型都可以实现任何接口,所以通过不同实体类型对接口值方法的调用就是多态

继承

通过将struct的字段里面声明为匿名字段(所有内置类型和自定义类型),能够实现对字段以及字段类型实现的方法的继承。