简介
Golang interface(接口)是一种抽象的类型,只定义对象的行为规范但不具体实现,具体的规范细节由对象来实现。
使用接口的好处
由于 Golang 中并没有明确的面向对象编程思想,所以 Golang 也没有面向对象的类和继承概念。
值得庆幸的是:Golang “十分灵活” 语言特性,使得习惯面向对象编程的我们,依然能实现面向对象的特性:封装、继承与多态
使用接口概念的好处在于——它分离 方法 和 具体代码实现逻辑,让函数更具有适应性。
这么一说你肯定很抽象,但举个数据操作的例子你就立刻明白了。
如今数据库有很多种: MySQL、PostgreSQL、SQL Server,每一种数据库都有自己具体的数据库连接、操作方法
伪代码实现:
上面的代码定义了Mysql和PostgreSQL,然后它们都需要连接数据库。于是你会发现 main()中有重复的代码。
如果后续再加上SQL Server、Oracle等数据库,上面的代码量还会一直增加下去。
这里我们就能把他们抽象成 数据库,都需要 连接数据库、CURD(增删改查) 操作。
让开发者无需考虑数据库差异,差异都隐藏在接口背后的具体对象中。
Golang 为了解决类似问题,于是设计了接口概念。
这也是 适配器模式 这一程序设计模式的思想,接口是对同一类对象行为的抽象和概括。
接口不会和特定实现细节绑定在一起,通过这种抽象的方式让我们完成统一的操作。
总结而言:
- 接口是
同一类对象的约定协议。 同一类对象编写自己不同的实现操作细节实现接口约定好的方法 - 实现对象不用关心接口会被怎样使用,调用接口也不用关心接口的实现细节。
- Golang 的接口是一种
类型、抽象结构,不含具体结构、数据格式以及类型。