什么接口
之前我们已经看过接口了,我们也认识到它是一种抽象类型,并且将它比作盒子,什么能都装,其实接口不仅仅是上面那种。接口还可以用来定义方法的一种集合,只有定义,没有实现,如果后期我们完成了一个类型要求接口中的方法定义,可以说,这个类型实现了该接口。
接口的类型
空接口
空接口如我们之前所述,可以将它必做一个盒子,能够放置任何东西,其定义如下
var ss interface{}
可以参考上篇文章: juejin.cn/post/709192…
非空接口
我们也将其称之为有方法列表的接口类型,非空接口提供的是一些方法而已,我们不需要知道它是什么,我们能够知道它提供了哪些方法。
一个非空接口类型定义了多个方法,如果一个具体类型要实现该接口,那么必须实现接口类型中定义的所有方法才行。
定义非空接口
定义非空接口格式如下
type 非空接口名称 interface { 方法1(接收参数) (返回值) 方法2(接收参数) (返回值) 嵌套的接口 }
例如,我们想定义一个支付/退款的这么一个非空接口,我们可以定义如下
如上,我们就已经写好了,定义接口,不需要知道细节,只用知道应该写入哪些方法即可,例如上述例子中,该PayInfo
接口定义了Pay
方法和Refund
方法。
实现非空接口
实现非空接口,则需要实现接口中定义的全部方法才行,例如,我们实现一下上述的非空接口
我们代码编译运行可得
有没有感觉一点“类”的影子了,这个接口已经提供过了
上述例子中,接口已经提供了,只要实现 Pay() bool
和 Refund() bool
这2个方法,我们就可以实现了该接口
为什么需要接口
接口是对类型的抽象,通过接口,我们可以写出更灵活和通用的函数,不过在编写接口时候,往往会考虑复杂多样化,导致interface
需要实现的方法有很多,然后再来定义这些方法,这会增加不需要的成本,总之,在设计接口时,尽量设计为刚好需要的,越小的接口越容易实现。