golang的类型断言
前言:原因很简单,写的代码panic了。报错如下。为此专门看下golang的类型断言。
“[PANIC]interface conversion: interface {} is string, not float64”。
1、类型断言(assertion)
所谓“类型断言”即判断一个变量是不是某个类型的实例(简单来讲就是判断所属类型)。
举例例子,interface属于一般类型其具体类型是不明确的,当要将其转换成具体类型的时候就要使用类型断言。如果不使用的话一旦类型对不上就会出现类似前面所说的panic。
1.1、类型assertion和类型switch只用作用与interface{}
package mainimport ("fmt"
)func main() {var v string = "hello" // var v interface{} = "hello"s, ok := v.(string)fmt.Println("s=", s, ",ok=", ok)}
对于上述代码会得到如下错误。

1.2、断言失败则会panic
如下前者:v到string的类型assertion成功,返回s等于“hello”
如下后者:v到float64的类型assertion失败,导致panic。
package mainimport ("fmt"
)func main() {var v interface{} = "hello"s := v.(string)fmt.Println("s=", s)f := v.(float64) //会painicfmt.Println("f=", f)}
1.3、使用ok的方式避免panic
当assertion失败的时候,ok返回false就不会引发panic行为。
package mainimport ("fmt"
)func main() {var v interface{} = "hello"s, _ := v.(string)fmt.Println("s=", s)f, ok := v.(float64)if ok {fmt.Println("f=", f)} else {fmt.Println("not a float64")}}
执行结果如下:

1.4、v.(type)配合switch进行类型判断
还有一种方式就是v.(type)配合switch进行类型判断。
package mainimport ("fmt"
)func main() {//var v interface{} = "hello"var v interface{} = 1234switch t:=v.(type) {case string:fmt.Println("v is type of string")case int:fmt.Println("v is type of int")case float64:fmt.Println("v is type of float64")}}
1.5、小结
v.(T)的写法可以在运行是判断v的值是不是T类型,是的话就直接使用其值,不是则panic;
类型assertion和类型switch非常类似于C++的多态类型之间的转换。
相关文章:
golang的类型断言
前言:原因很简单,写的代码panic了。报错如下。为此专门看下golang的类型断言。 “[PANIC]interface conversion: interface {} is string, not float64”。 1、类型断言(assertion) 所谓“类型断言”即判断一个变量是不是某个类型的实例(简单来讲就是判…...
监听dom变化,监听dom属性变化
一、利用new MutationObserver const config {attributes: true, // 监听属性变化childList: true, // 监听子节点变subtree: true // 监听后代元素变化};jianting new MutationObserver(() > {this.changeFun()});jianting.observe(dom, config) /监听 jianting.disconne…...
mfc140u.dll丢失怎么修复,mfc140u.dll文件有什么作用
今天我想和大家分享的是关于mfc140u.dll文件丢失的解决方法。在我们使用电脑的过程中,有时候会遇到一些错误提示,其中比较常见的就是“无法找到mfc140u.dll文件”。那么,这个文件是什么呢?它有什么作用呢? 首先&#…...
关于MySql update语句不能用子查询的解决办法
关于MySql update语句不能用子查询的解决办法 使用MySql数据库语法操作update时,第一时间想到的是一下写法: UPDATE purchase_request_detail SET convert_to_voucher_id2, convert_to_voucher_typeinventory-voucher WHERE detail_id IN (select deta…...
【WinForm】WinForm程序C#分屏显示
文章目录 前言1. 准备工作2. 步骤3 示例代码4. 结论 前言 在开发WinForm应用程序时,有时我们需要在另一个屏幕上显示与主界面内容相同的界面。本文将介绍如何使用C#克隆正在运行的界面,并在另一个屏幕上显示相同的内容。 1. 准备工作 在开始之前&…...
云安全—K8S API Server 未授权访问
0x00 前言 master节点的核心就是api服务,k8s通过REST API来进行控制,在k8s中的一切都可以抽象成api对象,通过api的调用来进行资源调整,分配和操作。 通常情况下k8s的默认api服务是开启在8080端口,如果此接口存在未授…...
nodejs+vue啄木鸟便民维修网站设计与实现-计算机毕业设计python-django-php
1、目的: 设计一个适用于便民家电维护的平台。该系统方便管理员对用户信息的管理,使用户在不掌握任何专业知识的前提下,可以方便快速的上手,因此项目应具有广泛使用人群。该课题应包括(至少包括)以下几个基…...
【数据结构】树形结构所有路径复原为链表
目录 1. 树形结构可视化 2. 树形结构转为链表 此目标是要还原树形结构的所有路径。树形结构是一种常见的数据结构,它表示元素之间层次关系。在树形结构中,每个节点可能拥有一个或多个子节点,形成了一个分层的结构。为了还原树形结构的路径&…...
linux杀毒软件下载、安装(在线安装、离线安装)
下载 ClamAVNet 离线安装 # 离线安装 rpm -ivh --prefix/usr/local/clamav clamav*linux.x86_64.rpm # 添加用户组和组成员 groupadd clamav useradd -g clamav clamav # 创建日志目录、病毒库目录和套接字目录 mkdir -p /usr/local/clamav/logs mkdir -p /usr/local/clamav/…...
系列五、映射文件xxxMapper.xml
一、概述 mapper映射文件是mybatis中最重要的部分,涉及到的细节也非常多。 1.1、parameterType 表示输入参数的类型。例如: <select id"getUserById" parameterType"integer" resultType"org.star.entity.model.UserDO&…...
【缓存】Spring全家桶中@CacheEvict无效情况共有以下几种
Spring全家桶中CacheEvict无效情况共有以下几种 一、背景介绍二、原因分析三、解决方案 一、背景介绍 SpringBoot中使用Cacheable注解缓存数据,使用CacheEvict注解删除缓存。但是在项目使用过程中,发现使用CacheEvict注解删除缓存无效。 拓展ÿ…...
P9117 [春季测试 2023] 涂色游戏
Portal. 维护每一行、每一列最后一次染色时染上的颜色以及时间戳即可。 时间复杂度 O ( T n ) O(Tn) O(Tn)。 #include <bits/stdc.h> using namespace std;const int maxn1e55; struct node{int c,t;}a[maxn],b[maxn];void solve() {int n,m,q;cin>>n>>…...
react如何进行项目配置代理
目录 一、前言 二、配置方法 三、总结 前言: 在使用React创建应用程序时,配置代理的目的是为了解决跨域请求的问题。跨域请求是指在浏览器中,一个站点的Web应用程序向另一个不同域名的站点发送请求。由于浏览器的安全策略,这些…...
2023杭州.云栖大会:计算,为了无法计算的价值
目录 前言 第一次参加云栖大会的印象 第二次至今参加云栖大会的感受 2023云栖大会介绍 这些年,我的工作、生活、关注的技术领域等发生的变化 对未来云栖大会的期待与建议 🎈个人主页:库库的里昂 🎐C/C领域新星创作者 &#…...
MIT6.5830 Lab1-GoDB实验记录(二)
MIT6.5830 Lab1-GoDB实验记录(二) – WhiteNights Site 标签:Golang, 数据库 接下来我们将完成tuple.go的缺失代码,并通过tuple_test.go的测试。 实验步骤 观察tuple.go 观察肯定是第一步,先打开tuple.go。 快300行代…...
设计模式—创建型模式之工厂模式
设计模式—创建型模式之工厂模式 工厂模式(Factory Pattern)提供了一种创建对象的最佳方式。我们不必关心对象的创建细节,只需要根据不同情况获取不同产品即可。 简单工厂模式 比如我们有造车的工厂,来生产车,我们先…...
N.B.缩略语的意思
阅读文献的时候,经常遇到N.B.这个缩略语,是表示“注意”的意思,它是nota bene的缩写,是拉丁短语。 例如: N.B. all Values are Hexadecimal...
SpringBoot源码透彻解析—自动装配
花点时间找到程序入口: 整个自动装配的流程总结如下: bean工厂后置处理器(ConfigurationClassPostProcessor) 扫描spring.factories和spring-autoconfigure-metadata.properties两个文件,将文件中的自动装配类信息抽象成Con…...
基于springboot实现疫情防控期间外出务工人员信息管理系统项目【项目源码+论文说明】
基于springboot疫情防控期间外出务工人员信息管理系统 摘要 网络的广泛应用给生活带来了十分的便利。所以把疫情防控期间某村外出务工人员信息管理与现在网络相结合,利用java技术建设疫情防控期间某村外出务工人员信息管理系统,实现疫情防控期间某村外出…...
自动曝光算法(第一讲)
序言 失业在家无事,想到以后换方向不做自动曝光了,但是自动曝光的工作经验也不能浪费了,准备写一个自动曝光的教学,留给想做自动曝光的小伙伴参考。笔者当时开发自动曝光没有按摄影的avtvevbvsv公式弄,而是按正确的增…...
告别环境配置焦虑:用 Bochs 2.6.10 在 Ubuntu 上快速搭建你的第一个‘自制操作系统’实验台
从零构建操作系统实验环境:Bochs 2.6.10在Ubuntu下的实战指南当我在大学第一次尝试编写引导扇区代码时,花了整整三天时间才让屏幕上显示出"Hello World"。这段经历让我深刻意识到:环境配置的复杂度往往比算法本身更令人崩溃。本文将…...
Kubernetes服务发现与负载均衡机制:构建高效的服务通信网络
Kubernetes服务发现与负载均衡机制:构建高效的服务通信网络 一、服务发现概述 服务发现是微服务架构中服务之间相互定位和通信的核心机制。在Kubernetes中,服务发现通过Service资源实现,它为一组Pod提供稳定的网络标识和负载均衡能力。 1.…...
如何快速配置Atmosphere破解系统:Switch游戏体验全面升级指南
如何快速配置Atmosphere破解系统:Switch游戏体验全面升级指南 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 想要让你的Nintendo Switch游戏加载速度提升65%,帧率翻…...
LangGraph多智能体能力路由:动态专家选择与负载均衡
LangGraph多智能体能力路由:动态专家选择与负载均衡一、引言 钩子 你是否遇到过这种情况: 当你构建了一个由多个大模型或专业Agent组成的“超级团队”——有的精通数学推理、有的擅长代码生成、有的是情感分析小能手、还有的能写长篇技术文档——却发现整…...
BabelDOC:智能PDF翻译神器,完美保留原版格式与布局的终极方案
BabelDOC:智能PDF翻译神器,完美保留原版格式与布局的终极方案 【免费下载链接】BabelDOC Yet Another Document Translator 项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOC 还在为PDF文档翻译后格式错乱而烦恼吗?BabelDO…...
RePKG架构深度解析:解密Wallpaper Engine资源处理的核心技术
RePKG架构深度解析:解密Wallpaper Engine资源处理的核心技术 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 在数字内容创作领域,资源打包与纹理处理是图形应…...
虚拟化与加密环境下勒索软件检测:基于存储IO模式与XGBoost的鲁棒方案
1. 项目概述:当勒索软件遇上虚拟化与加密在数据安全领域,勒索软件无疑是最具破坏性的威胁之一。它不像传统病毒那样破坏文件,而是通过加密用户数据来勒索赎金,攻击目标从个人电脑蔓延到企业服务器和云环境。传统的防御手段&#x…...
变分量子编译:用乘积态训练实现高效量子动力学模拟
1. 项目概述与核心价值量子动力学模拟,简单来说,就是用量子计算机来“播放”一个量子系统随时间变化的“电影”。这听起来像是量子计算机的“本职工作”,毕竟费曼在四十多年前就提出了这个构想。然而,把理论构想变成在真实、不完美…...
告别Cygwin!用Windows版MRT一键批量拼接MODIS影像(附详细配置流程)
告别Cygwin!Windows版MRT全流程实战:MODIS影像批量拼接指南 遥感数据处理的门槛正在被技术进步不断拉低。曾几何时,在Windows系统下处理MODIS数据意味着必须忍受Cygwin这类Linux模拟环境的笨重与兼容性问题——环境配置复杂、命令操作反直觉、…...
【Java后端开发】花了2k+多的人民币,烧了几十亿Token,慢慢整理出来适用于Java开发人员的codex配置,还在持续优化中
📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、《解密程序员的思维密码——沟通、演讲、思考的实践》作者、清华大学出版社签约作家、Java领域…...
