接口常见使用场景,是对包外提供访问,或者预留扩展空间
golang 接口的实现:只要类型方法集里面包含了接口声明所有方法,就视为实现了该接口,无需显式声明
类型可以实现多个接口
换句话说,我们可以先实现类型,而后再抽象出所需的接口。这种非侵入式设计有很多好处。例如:在项目前期就设计出最合理的接口并不容易,而在代码重构时,模块分拆时再分离出接口,用以解耦就很常见。在使用第三方库时,抽象出所需的接扣,即可屏蔽太多不需要关注的内容,一遍日后替换
接口从内部实现来看也是一种结构类型。只是编译器会对它做很多限制:
(1)不能有字段
(2)不能定义自己的方法
(3)只能声明方法,不能实现
(4)可嵌入其他接口类型
接口名通常以er为后缀。
接口没有任何方法声明时,是个空接口(interface{}),可被赋值为任何类型的对象
接口嵌入其他接口时,也必须实现嵌入的接口里面的方法
将对象赋值给接口对象时,会赋值该对象
类型判断可将接口变量还原为原始类型,获取用来判断是否实现了某个更具体的接口类型
使用 ok-idiom 模式,即便转换失败也不会引发panic。