接口


接口的定义

Go语言提倡面向接口编程。

每个接口由数个方法组成,接口的定义格式如下:

type 接口类型名 interface{
    方法名1( 参数列表1 ) 返回值列表1
    方法名2( 参数列表2 ) 返回值列表2
    …
}

其中:

  • 接口名:使用type将接口定义为自定义的类型名。Go语言的接口在命名时,一般会在单词后面添加er,如有写操作的接口叫Writer,有字符串功能的接口叫Stringer等。接口名最好要能突出该接口的类型含义。
  • 方法名:当方法名首字母是大写且这个接口类型名首字母也是大写时,这个方法可以被接口所在的包(package)之外的代码访问。
  • 参数列表、返回值列表:参数列表和返回值列表中的参数变量名可以省略。

举个例子:

type writer interface{
    Write([]byte) error
}

当你看到这个接口类型的值时,你不知道它是什么,唯一知道的就是可以通过它的Write方法来做一些事情。

实现接口的条件

一个对象只要全部实现了接口中的方法,那么就实现了这个接口。换句话说,接口就是一个需要实现的方法列表

接口类型变量

接口类型变量能够存储所有实现了该接口的实例

接收者

如果结构体实现的接收者是值类型,那么接口对象可以被赋值为值或者指针(语法糖),但是如果是指针类型,那么就不能被赋值为值类型(不会自动取地址,但是除了接口对象都会)

类型与接口的关系

一个类型实现多个接口

一个类型可以同时实现多个接口,而接口间彼此独立,不知道对方的实现。

多个类型实现同一接口

Go语言中不同的类型还可以实现同一接口 ,并且一个接口的方法,不一定需要由一个类型完全实现,接口的方法可以通过在类型中嵌入其他类型或者结构体来实现。

接口嵌套

接口与接口间可以通过嵌套创造出新的接口。

空接口

空接口的定义

空接口是指没有定义任何方法的接口。因此任何类型都实现了空接口

空接口类型的变量可以存储任意类型的变量

空接口的应用

空接口作为函数的参数

使用空接口实现可以接收任意类型的函数参数。

空接口作为map的值

使用空接口实现可以保存任意值的字典。

类型断言

x.(T)
  • x:表示类型为interface{}的变量
  • T:表示断言x可能是的类型。

该语法返回两个参数,第一个参数是x转化为T类型后的变量,第二个值是一个布尔值,若为true则表示断言成功,为false则表示断言失败。

x.(type)返回类型。


文章作者: ffacs
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ffacs !
  目录