GO语言学习系列十——GO的接口(Interface)

接口(interface)

GO语言的接口是非常灵活的,它通过一种方式来声明对象的行为,谁实现了这些行为,就相当于实现了这个接口 接口里面声明各种方法的集合,但接口本身不去实现这些方法所要的一些操作,因为这些方法没有被实现,所以它们是抽象的方法,这就非常像其它语言里面向对象的实现抽象方法一样,只不过其它语言需要继承然后去实现相对应的方法,而GO不需要继承,你只要在结构中声明和实现了这些方法,也就相当于你实现了这个抽象方法 接口声明格式 type 接口名称 interface{ 方法名称1(可能会用到的参数,可不传) 返回类型 方法名称2(可能会用到的参数,可不传) 返回类型 ... } 一个简单的接口实现 ``` package main

import ( "fmt" )

type USB interface { Name() string Connect() }

type PhoncConnecter struct { name string }

func (pc PhoncConnecter) Name() string { return pc.name }

func (pc PhoncConnecter) Connect() { fmt.Println(pc.name) }

func main() { // 第一种直接在声明结构时赋值 var a USB a = PhoncConnecter{"PhoneC"} a.Connect()

// 第二种,先给结构赋值后在将值给接口去调用
var b = PhoncConnecter{}
b.name = "b"
var c USB
c = b
c.Connect()

} 输出为: PhoneC b `` 说明:我们定义了USB的接口,并声明了两个方法,我们定义了PhoncConnecter结构并声明了一个name的变量,但我们通过方法特性,对结构也同样声明了两个方法,在GO中,你只要实现了接口中定义的方法,默认就代表你类似于其它语言中的继承,继承了那个接口,所以我们在main`函数中,就可以通过声明接口和结构进行相对应的操作,从而达到代码重复使用

接口类型的判断

在实际的项目中可能会用到多个接口来相互应用,这里就映射出一个新的需求,就是判断这个接口的类型,在GO中获得接口的类型是 声明的接口.(需要判断的类型),也就是这样a.(USB) 但我们实际是这样的 if v,ok:=a.(USb); ok{ // 是当前接口类型的操作 } 上面是对单一的类型的判断,如果要判断多个呢?我们经常是这样的,还记得的switch吧 switch t := a.(type) { case USB: fmt.Printf("USB is OK ") case nil: fmt.Printf("nil value: nothing to check?\n") default: fmt.Printf("Unexpected type %T\n", t) }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值