go的interface

简介: go的interface

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

指针接收者方法

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

目录
相关文章
|
2月前
|
Go
|
5月前
|
Go
go interface 使用
go interface 使用
28 0
|
7月前
|
Go
Go语言学习之 interface
Go语言学习之 interface
18 0
|
9月前
|
Go
go的interface怎么实现的?
面试题:go的interface怎么实现的?
60 0
|
10月前
|
存储 缓存 Go
如何用好 Go interface
The bigger the interface, the weaker the abstraction.
66 0
|
10月前
|
Go
Go Interface 合法验证
- 值方法集和接口匹配 - 给接口变量赋值的不管是值还是指针对象,都ok,因为都包含值方法集 - 指针方法集和接口匹配 - 只能将指针对象赋值给接口变量,因为只有指针方法集和接口匹配 - 如果将值对象赋值给接口变量,会在编译期报错(会触发接口合理性检查机制)
|
Go Android开发 Python
实证与虚无,抽象和具象,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang接口(interface)的使用EP08
看到接口这两个字,我们一定会联想到面向接口编程。说白了就是接口指定执行对象的具体行为,也就是接口表示让执行对象具体应该做什么,所以,普遍意义上讲,接口是抽象的,而实际执行行为,则是具象的。
实证与虚无,抽象和具象,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang接口(interface)的使用EP08
|
存储 Java Go
速学Go语言接口interface
速学Go语言接口interface
|
Go
go语言map[string]string 转map[string]interface{}
go语言map[string]string 转map[string]interface{}
598 0
|
Java Go 数据安全/隐私保护
Go 编程 | 连载 18 - 接口 Interface
Go 编程 | 连载 18 - 接口 Interface
Go 编程 | 连载 18 - 接口 Interface