接口常见使用场景,是对包外提供访问,或者预留扩展空间

golang 接口的实现:只要类型方法集里面包含了接口声明所有方法,就视为实现了该接口,无需显式声明

类型可以实现多个接口

换句话说,我们可以先实现类型,而后再抽象出所需的接口。这种非侵入式设计有很多好处。例如:在项目前期就设计出最合理的接口并不容易,而在代码重构时,模块分拆时再分离出接口,用以解耦就很常见。在使用第三方库时,抽象出所需的接扣,即可屏蔽太多不需要关注的内容,一遍日后替换

接口从内部实现来看也是一种结构类型。只是编译器会对它做很多限制:

(1)不能有字段

(2)不能定义自己的方法

(3)只能声明方法,不能实现

(4)可嵌入其他接口类型

接口名通常以er为后缀。

接口没有任何方法声明时,是个空接口(interface{}),可被赋值为任何类型的对象

接口嵌入其他接口时,也必须实现嵌入的接口里面的方法

将对象赋值给接口对象时,会赋值该对象

类型判断可将接口变量还原为原始类型,获取用来判断是否实现了某个更具体的接口类型

使用 ok-idiom 模式,即便转换失败也不会引发panic。