当前位置: 首页 > news >正文

什么是 Golang 类型断言

类型断言:用于检查某个接口是否包含某个具体类型,语法x.(T),x是一个接口类型表达式,T是具体的类型,如果x包含的值可以被转换成T类型,则是ok

在Go语言中,任何类型的值都属于空接口类型。空接口类型interface{}表示空接口,它可以容纳任意类型的值。

例子1:

var i interface{} = "hello"s, ok := i.(string)
if ok {fmt.Println(s)
} else {fmt.Println("i is not a string")
}

例子2:

在下面这段代码中,(areaIntf.(*Square))是一个类型断言语句,它的目的是检查areaIntf是否包含了*Square类型的值,并尝试将其转换为*Square类型。在Go语言中,类型断言返回两个值:转换后的值和一个布尔值,表示转换是否成功。

在这里,areaIntf被赋值为sq1,而sq1是一个*Square类型的指针。因此,areaIntf包含了*Square类型的值,所以类型断言(areaIntf.(*Square))会返回一个非nil的*Square类型的指针,并且ok的值为true,表示类型断言成功。

因此,在if语句中,ok的值为true,说明areaIntf包含了*Square类型的值,所以程序会打印出"The type of areaIntf is: *main.Square"。

type Square struct {side float32
}type Shaper interface {Area() float32
}
func main() {var areaIntf Shapersq1 := new(Square)sq1.side = 5areaIntf = sq1// Is Square the type of areaIntf?if t, ok := areaIntf.(*Square); ok {fmt.Printf("The type of areaIntf is: %T\n", t)}}
func (sq *Square) Area() float32 {return sq.side * sq.side
}

特殊类型的类型断言 type-Switch:

接口变量的类型也可以使用一种特殊形式的 switch 来检测:type-switch

func main() {printType(1)printType("Hello")
}func printType(i interface{}) {switch i.(type) {  //获取i接口的实际具体类型case int:fmt.Println("i is int")case string:fmt.Println("i is string")default:fmt.Println("i is other type")}
}//打印
//i is int
//i is string

http://www.lryc.cn/news/312866.html

相关文章:

  • mysql数据库root权限读写文件
  • 力扣爆刷第88天之hot100五连刷26-30
  • Ethersacn的交易数据是什么样的(2)
  • 学习Android的第二十二天
  • JavaScript——流程控制(程序结构)
  • 如何用ChatGPT+GEE+ENVI+Python进行高光谱,多光谱成像遥感数据处理?
  • AIGC工具( 7个 )
  • 学习Java的第一天
  • 【设计模式】工厂模式与抽象工厂模式
  • 使用plasmo框架开发浏览器插件,注入contents脚本和给页面添加UI组件
  • python并发 惰性处理大型数据集
  • Docker将本地的镜像上传到私有仓库
  • [LeetBook]【学习日记】有效数字——状态机
  • 学习目标2024
  • 引入js,刷新清除缓存
  • 【VSCODE修改代码行间距】解决方案
  • lvs+keepalive
  • 用spark读取及存储数据
  • 蓝牙 | 软件: Qualcomm BT Audio 问题分析(4)----检查MIPS使用情况
  • 【实战】K8S集群部署nacos并接入Springcloud项目容器化运维
  • prometheus监控zookeeper方案
  • 智能照明控制系统的优点有哪些
  • Cent OS 安装 vmware tools
  • 写一个关于RN的分秒毫秒组件(组件状态由同一个父组件控制)
  • javascript中字符串处理,常用的方法汇总
  • STM32CubeMX学习笔记14 ---SPI总线
  • Gson(List<Object>转String 、String转List<Object>)
  • uniapp路由跳转的方式
  • 使用Python模拟绘制自由落体运动过程中的抛物线
  • 批量爬取网站图片脚本