【Go语言核心编程】知识点记录——第四章 接口

接口类型断言

  1. 直接赋值模式:
o := i.(TypeName)

(1)TypeName是具体类型名,此时如果接口i绑定的实例类型就是具体类型TypeName,则变量o的类型就是TypeName,变量o的值就是接口绑定的实例值的副本(当然实例可能是指针值,那就是指针值的副本)
(2)TypeName是接口类型名,如果接口i绑定的实例类型满足接口类型TypeName,则变量o的类型就是接口类型TypeName,o底层绑定的具体类型实例是i绑定的实例的副本(实例可能是指针值,那就是指针值的副本)
(3)如果上述两种情况都不满足,则程序抛出panic

  1. comma,ok表达式模式:
if o,ok := i.(TypeName); ok{

}

(1)TypeName是具体类型名,此时如果接口i绑定的实例类型就是具体类型TypeName,则ok为true,变量o的类型就是TypeName,变量o的值就是接口绑定的实例值的副本(当然实例可能是指针值,那就是指针值的副本)
(2)TypeName是接口类型名,如果接口i绑定的实例类型满足接口类型TypeName,则ok为true,变量o的类型就是接口类型TypeName,o底层绑定的具体类型实例是i绑定的实例的副本(当然实例可能是指针值,那就是指针值的副本)
(3)如果上述两个都不满足,则ok为false,变量o是TypeName类型的“零值”,此种条件分支下程序逻辑不应该再去引用o,因此此时的o没有意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值