Go Interface 从理解到深入 如果说 goroutine 和 channel 是 Go 并发的两大基石,那么接口是 Go 语言编程中数据类型的关键。在 Go 语言的实际编程中,几乎所有的数据结构都围绕接口展开,接口是 Go 语言中所有数据结构的核心 Go 不是一种典型的 OO 语言,它在语法上不支持类和继承的概念 没有继承是否就无法拥有多态行为了呢?答案是否定的,Go 语言引入了一种新类型—Interface,它在效果上实现了类似于 C++ 的 “多态” 概念,虽然与 C++ 的多态在语法上并非完全对等,但至少在最终实现的效果上,它有多态的影子 虽然 Go 语言没有类的概念,但它支持的数据类型可以定义对应的 method(s)。本质上说,所谓的 method(s) 其实就是函数,只不过与普通函数相比,这类函数是作用在某个数据类型上的,所以在函数签名中,会有个 receiver(接收器) 来表明当前定义的函数会作用在该 receiver 上 Go 语言支持的除 Interface 类型外的任何其它数据类型都可以定义其 method(而并非只有 struct 才支持 method),只不过实际项目中,method(s) 多定义在 struct 上而已。 从这一点来看,我们可以把 Go 中的 struct 看作是不支持继承行为的轻量级的 “类”,这一点比较类似 Abstract Class 从语法上看,Interface 定义了一个或一组 method(s),这些 method(s) 只有函数签名,没有具体的实现代码(有没有联想起 C++ 中的虚函数?)。若某个数据类型实现了 Interface 中定义的那些被称为 “methods” 的函数,则称这些数据类型实现(implement)了 interface。这是我们常用的 OO 方式……

阅读全文