Go语言中的接口

在一些面向对象的编程语言中,例如 Java、PHP 等,接口定义了对象的行为,只指定了对象应该做什么。行为的具体实现取决于对象。

在 Go 语言中,接口是一组方法的集合,但不包含方法的实现、是抽象的,接口中也不能包含变量。当一个类型 T 提供了接口中所有方法的定义时,就说 T 实现了接口。接口指定类型应该有哪些方法,类型决定如何去实现这些方法。

接口的定义

在Go语言中的接口和在Java中有明显的区别,在Go中对接口类型的定义是只要一个结构体实现了该接口中的方法,那么这个结构体就算是实现了这个接口,这使得接口十分地灵活

package main

import "fmt"

// interface 是一种类型
type vehicle interface {
	drive()
}

type car struct{}
type sportsCar struct{}
type van struct{}
type bus struct{}

func (c car) drive() {
	fmt.Println("di~~")
}

func (s sportsCar) drive() {
	fmt.Println("Wen~~")
}

func (v van) drive() {
	fmt.Println("Kua~~")
}

func (b bus) drive() {
	fmt.Println("Du~~")
}

func ignition(v vehicle) {
	v.drive()
}

func main() {
	ignition(car{})
	ignition(sportsCar{})
	ignition(van{})
	ignition(bus{})
}

在上面这段程序中,定义了一个接口类型vehicle他有一个drive()方法,只要实现了这个方法就是实现了这个vehicle接口,我们后面创建的car,sportsCar,van,bus都有各自的drive方法,所以他们都实现了vehicle接口。在声明ignition函数的时候,我们接收一个vehicle接口类型的结构体,所以car,sportsCar,van,bus这些结构体的实例都可以作为参数传递给ignition函数。

posted @ 2021-01-29 11:46  FarajMujey  阅读(154)  评论(0)    收藏  举报