在Go
语言中,接口是一组方法的签名。当某个类型为接口中的所有方法提供了方法的实现,它就实现了该接口。在Go
语言中,接口和实现类的关系是非侵入式,也就是说一个类型要实现接口的话没必要显式的去声明自己实现了该接口,只要默默的将接口中的方法实现即可。
接口区别于我们之前所有的具体类型,接口是一种抽象的类型。当你看到一个接口类型的值时,你不知道它是什么,唯一知道的是通过它的方法能做什么。
语法
接口的定义:
type 接口名 interface{
方法名(参数列表)返回值
...
}
如果接口没有任何的方法声明,那么它就是一个空接口,它的用途类似于面向对象里的根类型Object
,可被赋值为任何类型的对象。
接口默认值:
接口的默认值是nil
,如果实现接口的类型支持的话,可以做相等运算。
func main() {
var v1, v2 interface{
}
fmt.Println(v1 == nil, v1 == v2) // true true
v1 = 100
v2 = 100
fmt.Println(v1 == v2) // true
}
接口的实现:
一个对象只要全部实现了接口中的方法,那么就实现了这个接口。换句话说,接口就是一个需要实现的方法列表。
构建一个Action
接口,创建一个Student
类,然后实现Action
接口。
type Action interface {
speak()
eat()
sleep()
}
type Student struct {
name string
ID int
}
func (s Student)speak