Go语言的类型断言

类型断言是Go语言中用于接口值的操作,它检查接口的动态类型是否匹配指定类型。如果断言类型为具体类型,会检查是否相同;若为接口类型,检查是否满足该接口。空接口值的类型断言会失败并触发panic。当类型断言包含两个结果的赋值时,会返回一个布尔值表示断言是否成功。
摘要由CSDN通过智能技术生成

类型断言是一个作用在接口值上的操作,写出来类似于x.(T),其中x是一个接口类型的表达式,而T是一个类型(称为断言类型)。类型断言会检查作为操作数的动态类型是否满足指定的断言类型,这有两种可能:

1.如果T是一个具体类型,那么类型断言会检查x的动态类型是否为T。如果是则检查成功,类型断言的结果就是x的动态值,类型就是T,如果不是则检查失败。

2.如果T是一个接口类型,那么类型断言会检查x的动态类型是否满足T。如果满足则检查成功,但动态值并没有提取出来,结果仍然是一个接口值,接口值的类型和值部分也没有变更,只是结果的类型为接口类型T。换句话说,类型断言是一个接口值表达式,从一个接口类型变为拥有另外一套方法的接口类型(通常是方法数量增多),但保留了接口值中的动态类型和动态值部分。

var w io.Writer
w = os.Stdout //w为io.Writer接口类型,其动态类型为*os.File,值为os.Stdout的副本
rw := w.(io.Writer) //成功,io.Writer符合w的接口
w = new(ByteCounter) //w的动态类型变为[]byte
rw = w.(io.ReadWriter) //失败,*ByteCounter不符合w的接口

无论哪种类型作为断言类型,如果操作数是一个空接口值,类型断言都会失败并触发panic。另外,如果类型断言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值