在go语言中,interface是一种特殊的类型
Go的接口代表了一组方法的集合(method set),凡是实现了这些方法集合的类型,都被称之为实现了这个接口。Go不像Java语言,需要显示地定义某个类实现某个接口,Go不需要这样,在Go中,只要一个类型实现了某个接口定义的所有方法,它就实现了这个接口,可以赋值给这个接口类型的变量,或者作为这个接口类型的方法的实参或者返回值
定义方式
type 接口类型名 interface{ 方法名1( 参数列表1 ) 返回值列表1 方法名2( 参数列表2 ) 返回值列表2 … } //定义一个接口 type Object interface { getAge() int }
接口实现
//人 type Person struct { age int name string sex int8 } func (p Person) getAge()int { return p.age }
这个时候,person结构自动实现了object接口
在变量声明时,直接声明为interface类,之后可通过element.(T)方式 判断类型:
func main() { var p Object = Person{} if _, flag := p.(Person); flag { fmt.Printf("p is of type %T",p) } }
接口类型的变量可以存储所有实现了此接口的实例,例如:
package main //定义一个接口 type Object interface { getAge() int } //人 type Person struct { age int name string sex int8 } func (p Person) getAge() int { return p.age } //动物 type Animal struct { age int name string animalType int } func (p Animal) getAge() int { return p.age } func main() { var a, b Object a = Person{age: 10} b = Animal{age: 5} _ = a.getAge() _ = b.getAge() a, b = b, a //a和b可以互相赋值 }
指针接收者方法
函数方法可定义为指针接收者,同时也算是继承了接口: