Golang教程-Go接口

Go接口
Go使用不同的方法来实现面向对象的概念。Go没有类和继承的概念。Go通过强大的接口来满足这些要求。
接口为对象提供行为:如果某个对象能够做到这一点,那么它可以在这里使用。
接口定义了一组抽象方法,并不包含任何变量。
语法:
type Namer interface {
Method1(param_list) return_type
Method2(param_list) return_type
...
}
其中Namer是一个接口类型。
通常,接口的名称由方法名加上[e]r后缀组成,例如Printer、Reader、Writer、Logger、Converter等。
- 一个类型不需要显式地声明它实现了一个接口:接口的满足是隐式的。多个类型可以实现相同的接口。
- 实现接口的类型也可以拥有其他函数。
- 一个类型可以实现多个接口。
- 接口类型可以包含对实现了接口的任何类型实例的引用。
Go接口示例
package main
import (
"fmt"
)
type vehicle interface {
accelerate()
}
func foo(v vehicle) {
fmt.Println(v)
}
type car struct {
model string
color string
}
func (c car) accelerate() {
fmt.Println("Accelrating?")
}
type toyota struct {
model string
color string
speed int
}
func (t toyota) accelerate(){
fmt.Println("I am toyota, I accelerate fast?")
}
func main() {
c1 := car{"suzuki","blue"}
t1:= toyota{"Toyota","Red", 100}
c1.accelerate()
t1.accelerate()
foo(c1)
foo(t1)
}
输出:
Accelrating...
I am toyota, I accelerate fast...
{suzuki blue}
{Toyota Red 100}