go的interface
温馨提示:
本文最后更新于 2022年01月18日,已超过 1,127 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
在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可以互相赋值
}
指针接收者方法
函数方法可定义为指针接收者,同时也算是继承了接口:
正文到此结束
- 本文标签: 编程语言
- 本文链接: https://www.php20.cn/article/326
- 版权声明: 本文由仙士可原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权