golang基础之Interface接口的使用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

golang基础之Interface接⼝的使⽤

接⼝是⼀个或多个⽅法签名名的集合,定义⽅式如下

type Interface_Name interface { method_a() string method_b() int .... }

只要某个类型拥有该接⼝的所有⽅法签名,就算实现该接⼝,⽆需显⽰声明实现了那个接⼝,这称为structural Typing package main

import "fmt"

type USB interface { //定义⼀个接⼝:⽅法的集合

Name() string //Name⽅法,返回string

Connect() //Connect⽅法

}

type PhoneConnecter struct { //定义⼀个结构

name string //结构包含⼀个字段

}

func (pc PhoneConnecter) Name() string { //为结构定义⼀个⽅法,绑定接⼝

return //该⽅法命名为接⼝内的字段

} //返回结构体字段

func (pc PhoneConnecter) Connect() { //定义结构体另⼀个⽅法,与接⼝另⼀个⽅法绑定

fmt.Println("Connect:", )

}

func main() {

var a USB //定义⼀个变量为USB接⼝类型

a = PhoneConnecter{"PhoneConnecter"} //实例化⼀个结构体,并赋值给变量(接⼝)USB

a.Connect() //接⼝调⽤其Connect⽅法,也是结构⽅法

}

/*输出

Connect: PhoneConnecter

*/

接⼝可以作为匿名嵌⼊其它接⼝,或嵌⼊到结构中

package main

import "fmt"

type USB interface { //定义⼀个接⼝:⽅法的集合

Name() string //Name⽅法,返回string

Connecter //嵌⼊Connecter接⼝,可以使⽤Connecter⽅法

}

type Connecter interface { //定义另⼀个接⼝ Connecter

Connect() //包含⼀个接⼝⽅法:Connect

}

type PhoneConnecter struct { //定义⼀个结构

name string //结构包含⼀个字段

}

func (pc PhoneConnecter) Name() string { //为结构定义⼀个⽅法,绑定接⼝

return //该⽅法命名为接⼝内的字段

} //返回结构体字段

func (pc PhoneConnecter) Connect() { //定义结构体另⼀个⽅法,与接⼝另⼀个⽅法绑定

fmt.Println("Connect:", )

}

func main() {

var a USB //定义⼀个变量为USB接⼝类型

a = PhoneConnecter{"PhoneConnecter"} //实例化⼀个结构体,并赋值给变量(接⼝)USB

a.Connect()

Disconnect(a) //接⼝调⽤其Connect⽅法,也是结构⽅法

}

接⼝只是⽅法声明,没有实现调⽤,没有字段,只能通过绑定的类型⽅法访问

package main

import "fmt"

type USB interface { //定义⼀个接⼝:⽅法的集合

Name() string //Name⽅法,返回string

Connecter //嵌⼊Connecter接⼝,可以使⽤Connecter⽅法

}

type Connecter interface { //定义另⼀个接⼝ Connecter

Connect() //包含⼀个接⼝⽅法:Connect

}

type PhoneConnecter struct { //定义⼀个结构

name string //结构包含⼀个字段

}

func (pc PhoneConnecter) Name() string { //为结构定义⼀个⽅法,绑定接⼝

return //该⽅法命名为接⼝内的字段

} //返回结构体字段

func (pc PhoneConnecter) Connect() { //定义结构体另⼀个⽅法,与接⼝另⼀个⽅法绑定

fmt.Println("Connected:", )

}

func main() {

var a USB //定义⼀个变量为USB接⼝类型

a = PhoneConnecter{"htc M10"} //实例化⼀个结构体,并赋值给变量(接⼝)USB

a.Connect()

Disconnect(a) //接⼝调⽤其Connect⽅法,也是结构⽅法

}

func Disconnect(usb USB) {

if pc, ok := usb.(PhoneConnecter); ok { //传⼊结构体,判断赋值是否成功

fmt.Println("Disconnected:", )

return

}

fmt.Println("UNknown device.")

}

/*输出

Connect: htc M10

Disconnect:htc M10

*/

go没有像其他语⾔继承,如python中的object表⽰元类,所有的类都继承⾃object类,go通过接⼝也类似实现了此定义,因为只要某个类型实现了某个接⼝的⽅法,我们就说此类实现了这个接⼝。因为 type empty interface{} ---空接⼝没有任何⽅法,所以可以理解为所有的接⼝都实现了空接⼝的⽅法(继承)。

package main

import "fmt"

type USB interface { //定义⼀个接⼝:⽅法的集合

Name() string //Name⽅法,返回string

Connecter //嵌⼊Connecter接⼝,可以使⽤Connecter⽅法

}

type Connecter interface { //定义另⼀个接⼝ Connecter

Connect() //包含⼀个接⼝⽅法:Connect

}

type PhoneConnecter struct { //定义⼀个结构

name string //结构包含⼀个字段

}

func (pc PhoneConnecter) Name() string { //为结构定义⼀个⽅法,绑定接⼝

return //该⽅法命名为接⼝内的字段

} //返回结构体字段

func (pc PhoneConnecter) Connect() { //定义结构体另⼀个⽅法,与接⼝另⼀个⽅法绑定

fmt.Println("Connected:", )

}

func main() {

var a USB //定义⼀个变量为USB接⼝类型

a = PhoneConnecter{"htc M10"} //实例化⼀个结构体,并赋值给变量(接⼝)USB

a.Connect()

Disconnect(a) //接⼝调⽤其Connect⽅法,也是结构⽅法

}

# func Disconnect(usb interface{}) { //集成空接⼝,也可以实现

# if pc, ok := usb.(PhoneConnecter); ok { //传⼊结构体,判断赋值是否成功

相关文档
最新文档