Go语言中接口的定义和使用
interface类型可以定义一组方法,但是这些不需要实现。并且 interface不能包含任何变量。到某个自定义类型(比如结构体 Phone)要使用的时候,在根据具体情况把这些方法写出来(实现)。
接口里的所有方法都没有方法体,即接口的方法都是没有实现的方法。接口体现了程序设计的
多态和高内聚低偶合的思想
Golang中的接口,不需要显式的实现。只要一个变量,含有接口类型中的所有方法,那么这个变量就实现这个接口。因此,Golang中没有 implement这样的关键字
package main
import (
"fmt"
)
//声明/定义一个接口
type Usb interface {
//声明了两个没有实现的方法
Start()
Stop()
}
type Phone struct {
}
//让 Phone实现 Usb接口的方法
func (p Phone) Start() {
fmt.Println("手机开始工作。。。")
}
func (p Phone) Stop() {
fmt.Println("手机停止工作。。。")
}
type Camera struct {
}
//让 Camera实现
Usb接口的方法
func (c Camera) Start() {
fmt.Println("相机开始工作。。。")
}
func (c Camera) Stop() {
fmt.Println("相机停止工作。。。")
}
//计算机
type Computer struct {
}
//编写一个方法 Working方法,接收一个 Usb接口类型变量
//只要是实现了 Usb接口(所谓实现 Usb接口,就是指实现了 Usb接口声明所有方法)
func (c Computer) Working(usb Usb) { //usb变量会根据传入的实参,来判断到底是 Phone,还是 Camera
//通过 usb接口变量来调用 Start和 Stop方法
usb.Start()
usb.Stop()
}
func main() {
//测试
//先创建结构体变量
computer := Computer{}
phone := Phone{}
camera := Camera{}
//关键点
computer.Working(phone)
computer.Working(camera)
}
运行结果如下: