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

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

什么接口

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



接口的类型


空接口

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

var ss interface{}

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


非空接口

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


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



定义非空接口


定义非空接口格式如下

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

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


image.png



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



实现非空接口

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

image.png


我们代码编译运行可得

image.png

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

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



为什么需要接口


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






相关文章
|
7天前
|
Go
Golang语言基础之接口(interface)及类型断言
这篇文章是关于Go语言中接口(interface)及类型断言的详细教程,涵盖了接口的概念、定义、实现、使用注意事项以及类型断言的多种场景和方法。
16 4
|
28天前
|
机器学习/深度学习 存储 人工智能
Golang bytes 包学习
Golang bytes 包学习
15 3
|
2月前
|
编译器 Go C语言
通过例子学习在golang中调试程序
【7月更文挑战第4天】Go语言支持使用cgo进行汇编调试,官方文档在golang.org/doc/asm。注意,调试Go运行时可能遇到变量不可用或行号错误,需谨慎使用step命令。
58 1
通过例子学习在golang中调试程序
|
4月前
|
Go
golang学习参考记录
golang学习参考记录
|
4月前
|
JSON Go 数据格式
golang学习7,glang的web的restful接口结构体传参
golang学习7,glang的web的restful接口结构体传参
|
4月前
|
JSON Go 数据格式
golang学习6,glang的web的restful接口传参
golang学习6,glang的web的restful接口传参
|
4月前
|
JSON Go 数据格式
golang学习5,glang的web的restful接口
golang学习5,glang的web的restful接口
|
4月前
|
Go
golang学习4,glang的web接口
golang学习4,glang的web接口
|
4月前
|
Go
golang学习3,golang 项目中配置gin的web框架
golang学习3,golang 项目中配置gin的web框架
|
7天前
|
Go
Golang语言之管道channel快速入门篇
这篇文章是关于Go语言中管道(channel)的快速入门教程,涵盖了管道的基本使用、有缓冲和无缓冲管道的区别、管道的关闭、遍历、协程和管道的协同工作、单向通道的使用以及select多路复用的详细案例和解释。
36 4
Golang语言之管道channel快速入门篇