原创

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可以互相赋值
}

指针接收者方法

函数方法可定义为指针接收者,同时也算是继承了接口:

正文到此结束
本文目录