当前位置: 首页 > 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

相关文章:

什么是 Golang 类型断言

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

mysql数据库root权限读写文件

如果没有shell,只有数据库权限的情况下: 1. udf 提权提示没有目录:使用数据流创建目录 1. select xxx into outfile C:\\phpstudy_pro\\Extensions\\MySQL5.5.29\\lib\::$INDEX_ALLOCATION;2. select xxx into outfile C:\\phpstudy_pro\…...

力扣爆刷第88天之hot100五连刷26-30

力扣爆刷第88天之hot100五连刷26-30 文章目录 力扣爆刷第88天之hot100五连刷26-30一、142. 环形链表 II二、21. 合并两个有序链表三、2. 两数相加四、19. 删除链表的倒数第 N 个结点五、24. 两两交换链表中的节点 一、142. 环形链表 II 题目链接:https://leetcode.…...

Ethersacn的交易数据是什么样的(2)

分析 Raw Transanction RLP(Recursive Length Prefix)是一种以太坊中用于序列化数据的编码方式。它被用于将各种数据结构转换为二进制格式,以便在以太坊中传输和存储。RLP 是一种递归的编码方式,允许对复杂的数据结构进行编码。所…...

学习Android的第二十二天

目录 Android ContextMenu 上下文菜单 ContextMenu 范例 参考文档 Android SubMenu 子菜单 范例 参考文档 Android PopupMenu 弹出菜单 范例 参考文档 Android ContextMenu 上下文菜单 在Android开发中,ContextMenu(上下文菜单)为…...

JavaScript——流程控制(程序结构)

JavaScript——流程控制(程序结构) 流程控制就是来控制我们的代码按照什么结构顺序来执行。更倾向于一种思想结构。 流程控制分为三大结构:顺序结构、分支结构、循环结构 1、顺序结构 ​ 代码从上往下依次执行,从A到B执行&#x…...

如何用ChatGPT+GEE+ENVI+Python进行高光谱,多光谱成像遥感数据处理?

原文链接:如何用ChatGPTGEEENVIPython进行高光谱,多光谱成像遥感数据处理? 第一:遥感科学 从摄影侦察到卫星图像 遥感的基本原理 遥感的典型应用 第二:ChatGPT ChatGPT可以做什么? ChatGPT演示使用 …...

AIGC工具( 7个 )

人工智能技术有好的一方面,又不好的地方,要区别对待,吸取精华,去其糟粕。目前市场上有很多AI大模型,可以支持聊天,写文稿,创作等,部分可以生成图片,以下是7个很不错的免费…...

学习Java的第一天

一、Java简介 Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称。由 James Gosling和同事们共同研发,并在 1995 年正式推出。 后来 Sun 公司被 Oracle (甲骨文)公司收购,Jav…...

【设计模式】工厂模式与抽象工厂模式

工厂方法 以图书馆管理系统为例,需要API提供查询不同专业分类的书目列表,一般实现, class LibraryManager { public:LibraryManager() {}//按专业分类查询BookList Query(Type type) {if(type TA) {return ...;} else if (type TB) {} el…...

使用plasmo框架开发浏览器插件,注入contents脚本和给页面添加UI组件

plasmo:GitHub - PlasmoHQ/plasmo: 🧩 The Browser Extension Framework plasmo是一个开发浏览器插件的框架,支持使用react和vue等技术,而且不用手动管理manifest.json文件,框架会根据你在框架中的使用,自…...

python并发 惰性处理大型数据集

惰性计算是一种编程策略,它使得程序在何时执行计算的决定推迟到需要结果时才进行。这种策略的好处在于,它允许程序处理大规模数据或者需要大量计算的任务时节省内存和计算资源。 举例来说,当我们调用 Python 中的 range() 函数时&#xff0c…...

Docker将本地的镜像上传到私有仓库

使用register镜像创建私有仓库 [rootopenEuler-node1 ~]# docker run --restartalways -d -p 5000:5000 -v /opt/data/regostry:/var/lib/registry registry:2[rootopenEuler-node1 ~]# docker images REPOSITORY TAG IMAGE…...

[LeetBook]【学习日记】有效数字——状态机

题目 有效数字 有效数字(按顺序)可以分成以下几个部分: 若干空格一个小数或者整数(可选)一个’e’或’E’,后面跟着一个整数若干空格 小数(按顺序)可以分成以下几个部分&#xff1a…...

学习目标2024

技术: 什么是 Nacos apifox 业务: 域统一...

引入js,刷新清除缓存

一、这种会让所有的css/js资源重新加载 <meta http-equiv"pragram" content"no-cache"> <meta http-equiv"cache-control" content"no-cache, no-store, must-revalidate">二、加时间戳 每次引入&#xff0c;后面版本号都…...

【VSCODE修改代码行间距】解决方案

在我们编码的过程中&#xff0c;由于显示字体和显示器的不同&#xff0c;会需要调整行间距&#xff0c;在vscode默认的选项中没有看到设定行间距的选项&#xff0c;不过&#xff0c;可以手动修改配置档达到目的。 1.打开设置 2.打开配置档&#xff0c;手动进行设定 3.在选项中添…...

lvs+keepalive

虚拟路由冗余协议(Virtual Router Redundancy Protocol&#xff0c;简称VRRP) VRRP能够在不改变组网的情况下&#xff0c;将多台路由器虚拟成一个虚拟路由器&#xff0c;通过配置虚拟路由器的IP地址为默认网关&#xff0c;实现网关的备份。 协议版本: VRRPv2&#xff08;常用&…...

用spark读取及存储数据

文章目录 读取数据存储数据 读取数据 data spark.sql("""select * from temp.tables""") data.show(3)# 转成pandas方式 # df data.toPandas() # df.head(3)存储数据 table "temp.new_tables" data.write.format("hive"…...

蓝牙 | 软件: Qualcomm BT Audio 问题分析(4)----检查MIPS使用情况

大家好&#xff01; 我是“声波电波还看今朝”成员的一位FAE Devin.wen&#xff0c;欢迎大家关注我们的账号。 今天给大家大概讲解“如何排查Qualcomm BT Audio”的疑难杂症&#xff08;四&#xff09;&#xff1a;MIPS检查。 如果大家还没有注册我们大大通的账号&#xff0c…...

告别传统SwipeRefreshLayout!用Compose的pullRefresh()打造丝滑下拉刷新(附Paging3联动实战)

用Compose的pullRefresh()重构Android下拉刷新体验&#xff1a;从基础封装到Paging3深度集成 下拉刷新作为移动端最基础的用户交互之一&#xff0c;在Jetpack Compose时代迎来了全新的设计范式。传统Android开发中&#xff0c;我们习惯使用SwipeRefreshLayout包裹RecyclerView的…...

开发者效率工具集claw:从Unix哲学到现代开发工作流集成

1. 项目概述&#xff1a;一个为开发者打造的“瑞士军刀”式工具集最近在GitHub上闲逛&#xff0c;发现了一个名为opsyhq/claw的项目&#xff0c;它的名字和图标&#xff08;一个爪子&#xff09;一下子就抓住了我的眼球。点进去一看&#xff0c;简介很简单&#xff1a;“A coll…...

从HelloWorld到真实机器人:Fast DDS QoS策略实战指南(以导航数据发布为例)

从HelloWorld到真实机器人&#xff1a;Fast DDS QoS策略实战指南&#xff08;以导航数据发布为例&#xff09; 在机器人开发领域&#xff0c;数据传输的可靠性和实时性直接关系到系统的稳定性和安全性。当你的机器人从实验室demo走向真实场景时&#xff0c;简单的HelloWorld示例…...

锂离子动力电池机理建模与系统状态评估【附代码】

✨ 长期致力于新能源汽车、动力电池系统、状态监测与评估、Matlab/Simulink研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;全阶电化学-热耦合模型的有…...

Display Driver Uninstaller:显卡驱动清理的终极解决方案

Display Driver Uninstaller&#xff1a;显卡驱动清理的终极解决方案 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drivers-uninstall…...

第5章(补充) 张量宇宙学对黑洞奇点的解释——兼论奇点与大爆炸的统一机制

第5章&#xff08;补充&#xff09; 张量宇宙学对黑洞奇点的解释——兼论奇点与大爆炸的统一机制 摘要 黑洞奇点是广义相对论最著名的困境之一。奥本海默和斯奈德从爱因斯坦场方程出发&#xff0c;严格推导出大质量恒星引力塌缩会形成密度无穷大的奇点。然而&#xff0c;奇点的…...

终极窗口置顶解决方案:用AlwaysOnTop告别多任务切换烦恼

终极窗口置顶解决方案&#xff1a;用AlwaysOnTop告别多任务切换烦恼 【免费下载链接】AlwaysOnTop Make a Windows application always run on top 项目地址: https://gitcode.com/gh_mirrors/al/AlwaysOnTop 你是否经常需要在不同窗口间来回切换&#xff1f;是否觉得频…...

基础知识丨JAVA序列化与反序列化漏洞

今天在学习的时候又接触到了JAVA反序列化漏洞。一直只知道JAVA反序列化就是利用反序列化工具进行攻击&#xff0c;在目标系统中执行命令&#xff0c;利用的就是传输对象时采用JAVA序列化。但是也只知道这么多了。所以&#xff0c;就想着今天再了解一下反序列化漏洞。顺便&#…...

废品买卖回收管理系统(10053)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告/任务书&#xff09;远程调试控屏包运行一键启动项目&…...

别再被Nginx的rewrite循环搞懵了!一个真实Vue项目部署的500错误排查实录

从Nginx重定向死循环到优雅解决&#xff1a;Vue项目部署的深度排错指南 凌晨三点&#xff0c;服务器监控突然告警——刚上线的Vue企业门户网站出现大面积500错误。查看日志时&#xff0c;那个令人窒息的rewrite or internal redirection cycle错误信息让整个运维团队陷入沉思。…...