学习golang(8) 初探:接口(2)

什么接口

之前我们已经看过接口了,我们也认识到它是一种抽象类型,并且将它比作盒子,什么能都装,其实接口不仅仅是上面那种。接口还可以用来定义方法的一种集合,只有定义,没有实现,如果后期我们完成了一个类型要求接口中的方法定义,可以说,这个类型实现了该接口。

接口的类型

空接口

空接口如我们之前所述,可以将它必做一个盒子,能够放置任何东西,其定义如下

var ss interface{}

可以参考上篇文章: juejin.cn/post/709192…

非空接口

我们也将其称之为有方法列表的接口类型,非空接口提供的是一些方法而已,我们不需要知道它是什么,我们能够知道它提供了哪些方法。

一个非空接口类型定义了多个方法,如果一个具体类型要实现该接口,那么必须实现接口类型中定义的所有方法才行。

定义非空接口

定义非空接口格式如下

type 非空接口名称 interface {
    方法1(接收参数) (返回值)
    方法2(接收参数) (返回值)
    嵌套的接口
}

例如,我们想定义一个支付/退款的这么一个非空接口,我们可以定义如下

如上,我们就已经写好了,定义接口,不需要知道细节,只用知道应该写入哪些方法即可,例如上述例子中,该PayInfo接口定义了Pay方法和Refund方法。

实现非空接口

实现非空接口,则需要实现接口中定义的全部方法才行,例如,我们实现一下上述的非空接口

我们代码编译运行可得

有没有感觉一点“类”的影子了,这个接口已经提供过了

上述例子中,接口已经提供了,只要实现 Pay() boolRefund() bool这2个方法,我们就可以实现了该接口

为什么需要接口

接口是对类型的抽象,通过接口,我们可以写出更灵活和通用的函数,不过在编写接口时候,往往会考虑复杂多样化,导致interface需要实现的方法有很多,然后再来定义这些方法,这会增加不需要的成本,总之,在设计接口时,尽量设计为刚好需要的,越小的接口越容易实现。

posted @ 2022-05-05 16:34  pdudos  阅读(0)  评论(0编辑  收藏  举报  来源