1.简介
- 在go中的接口是以一种类型,一种抽象的类型。接口(interface)是一组函数method的集合,go中的接口不能包含任何变量。
- 在go中接口中的所有方法都没有方法体,接口定义了一个对象的行为规范,只定义规范不实现。接口体现了程序的多态和高内聚低耦合的思想。
- go中的接口也是一种数据类型,不需要显示实现,只需要一个变量含有接口类型中的所有方法,那么这个变量就实现了这个接口。
2.接口的定义
interface类型可以定义一组方法,但是这些不需要实现。并且interface不能包含任何变量。到某个自定义类型要使用的时候,再根据具体情况把这些方法写出来(实现)。
type 接口名 interface {
method1(参数...)返回值列表
method2(参数...)返回值列表
}
实现:
func (t 自定义类型) method1(参数...)返回值列表{
//方法体
}
func (t 自定义类型) method2(参数...)返回值列表{
//方法体
}
其中:
- 接口名:使用type将接口定义为自定义类型名,go语言的接口在命名时,一般会在单词后面添加er,如有写操作的接口writer,有字符串功能的接口叫Stringer等。接口名最好能突出该接口的类型含义。
- method:当方法名首字母是大写且这个接口名首字母也是大写,这个方法可以被接口所在的包(package)之外的代码访问。
- 参数和返回值列表:参数和返回值列表中的参数名可以省略。
3.快速入门
定义一个Usber接口让Phone和Camera结构体实现这个接口。
package mainimport "fmt"// 定义一个接口
type Usber interface {//声明了两个没有实现的方法start()stop()
}type Phone struct {
}// 手机要实现usb接口的化必须得实现usb接口中的所有方法
func (p Phone) start() {fmt.Println("手机开始工作了")
}
func (p Phone) stop() {fmt.Println("手机停止工作了")
}type Camera struct {
}// 照相机要实现usb接口的化必须得实现usb接口中的所有方法func (p Camera) start() {fmt.Println("照相机开始工作了")
}
func (p Camera) stop() {fmt.Println("照相机停止工作了")
}type Computer struct {
}// 编写一个方法Working,接口一个Usber接口类型的变量
// 只要实现了Usber接口,
func (c Computer) Working(usb Usber) {//通过usb接口变量来调用start和stop方法usb.start()usb.stop(