接口
基本语法
type 接口名 interface {
method1(参数列表) 返回值列表
method2(参数列表) 返回值列表
......
}
- interface类型可以定义一组方法,但是这些不需要实现。并且interface不能包含任何变量。到某个自定义类型(比如结构体phone)要使用的时候,在根据具体情况把方法写出来。
- 空接口interface{}没有任何方法,所以所有的类型都实现了空接口。即我们可以把任何变量赋值给空接口
- 接口里的所有方法都没有方法体,即接口的方法都是没有实现的方法。接口体现了程序设计的多态和高内聚低耦合的思想。
- Golang中的接口,不需要显式的实现。只要一个变量,含有接口类型的所有方法,那么这个变量就实现这个接口。
接口快速入门案例:
package main
import "fmt"
type Usb interface {
//声明了2个没有实现的方法
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("相机停止工作......")
}
//计算机实现Usb接口方法
type Computer struct{}
//编写一个working方法,接收一个Usb类型的变量类型
//专业属于叫:实现了Usb接口(所谓实现Usb接口,就是指变量包含了Usb接口声明的所有方法)
func (c Computer) Working(usb Usb) {
//通过usb接口变量调用start和stop方法
usb.Start()
usb.Stop()
}
func main(){
//测试:先创建结构体变量
computer := Computer{}
phone := Phone{}
camera := Camera{}
//关键点
computer.Working(phone) //相当于把手机通过usb接口接入计算机
computer.Working(camera) //相当于把相机通过usb接口接入计算机
}