type
status
date
slug
summary
tags
category
icon
password
空接口interface{}没有定义任何函数,因此Golang中所有类型都实现了空接口。当一个函数的形参interface{},那么在函数中,需要对形参进行断言,从而得到它的真实类型。
在学习接口断言之前,先了解一下类型断言,其实接口断言也是在判断类型。
类型断言
类型断言可以检查i是否为nil或者为某个类型,通常有两中方式
第一种:
这个表达式可以断言一个接口对象i里不是nil,并且接口对象i存储的值的类型是T,如果断言成功,就会返回值给t,如果断言失败,就会触发 panic。这个方式常用于 switch 结构。
第二种:
这个表达式也是可以断言一个接口对象t里不是nil,并且接口对象t存储的值的类型是T,如果断言成功,就会返回其类型给t,并且此时ok的值为true,表示断言成功。
如果接口值的类型,并不是我们所断言的T,就会断言失败,但和第一种表达式不同的事,这个不会触发panic,而是将ok的值设为false,表示断言失败,此时t为T的零值。这几种方式常用于if else结构。
接口断言
if else结构接口断言
输出:
可以看到,我们的断言成功了。
switch结构接口断言
断言其实还有另一种形式,就是用在利用switch语句判断接口的类型。
每一个case会被顺序地考虑。当命中一个case时,就会执行case中的语句,因此case语句的顺序是很重要的,因为很有可能会有多个case匹配的情况。
我们再封装一个switch逻辑的接口断言函数,逻辑和之前的一模一样,只是条件语句换成了switch....case:
输出:
可以看到switch断言也正常输出了。
下面附上源代码:
- Author:Serendipity
- URL:https://serendipity565.netlify.app//article/Go%E6%8E%A5%E5%8F%A3%E6%96%AD%E8%A8%80
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!