关于 interface{} 会有啥注意事项?下
我们一起来回顾一下上一次说到的 interface{}
-
可以用来做多态
-
接口类型分为空接口类型和非空接口类型,他们的底层数据结构不太一样
这里顺便说一下,用来作态需要满足这样的条件:
- 首先得有父类指针指向子类的对象
- 这个接口还必须是非空接口,里面得包含方法,也就是使用的底层数据结构是 iface
- 子类会去实现父类的具体方法
interface{} 注意断言
正常的使用断言,写一个简单的 断言 demo
type Animal interface{}func main() {var a Animal = "xiaomotong"v, ok := a.(string)if !ok{fmt.Println("type error")}fmt.Println("v == ",v)
}
断言注意写成 2 个返回值的,一个是具体的值,一个是 bool,判断断言是否成功,若成功则说明断言正确,且 v 会被赋值为实际变量的值
切忌没头脑的强转
func main() {var a Animal = "xiaomotong"v := a.(int)fmt.Println("v == ",v)
}
上述这种写法,若不判断是否断言成功,直接强转,程序是会 panic 的 ,执行上述程序后效果如下:
>go run main.go
panic: interface conversion: main.Animal is string, not intgoroutine 1 [running]:
main.main()D:/mycode/my_new_first/interface_test/main.go:13 +0x4c
exit status 2
程序崩掉,那就是线上问题了 xdm ,这里需要注意
当然我们也可以这样写
type Animal interface{}func main() {var a Animal = "xiaomotong"switch a.(type) {case string:fmt.Println("a type is string")case int:fmt.Println("a type is int")}}
通过 switch 的方式来判断 接口的数据类型,根据不同的数据类型来做不同的事情,进行分类处理
用于反射的注意点
golang 里面有反射这个概念,简单来说,咱们可以通过反射包来实现获取接口真实的类型,和真实的数据
举个小例子:
通过反射来获取 Animal 接口的数据类型,和具体的数据值
type Animal interface{}func main() {var a Animal = "xiaomotong"v := reflect.ValueOf(a)fmt.Printf("v type == ", v.Type(), " v == ", v.String())
}
执行上述代码后效果如下:
> go run main.go
v type == %!(EXTRA *reflect.rtype=string, string= v == , string=xiaomotong)
没毛病正常获取,但是如果我们这样写的话是不是也可以正确执行呢?
type Animal interface{}func main() {var a Animal = "xiaomotong"v := reflect.ValueOf(a)fmt.Printf("v type == ", v.Type(), " v == ", v.Int())
}
看这个例子也就和上面的例子相差在输出的时候,一个是v.String() ,一个是v.Int() ,可是结果却相差很大
go run main.go
v type == %!(EXTRA *reflect.rtype=string, string= v == , string=xiaomotong)
D:\mycode\my_new_first\interface_test>go run main.go
panic: reflect: call of reflect.Value.Int on string Valuegoroutine 1 [running]:
reflect.Value.Int(...)C:/Program Files/Go/src/reflect/value.go:999
main.main()D:/mycode/my_new_first/interface_test/main.go:26 +0x2bd
exit status 2
执行上述代码,go 程序给我们报了 panic 错误,这里需要注意 ,程序崩溃的原因是,我们将一个 string 类型的值反射成一个 Int 类型的值,直接在 反射包里面就给我们报了 panic
小知识,大挑战,简单的写 2 个注意事项,给 xdm 提个醒
欢迎点赞,关注,收藏
朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里
技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
我是阿兵云原生,欢迎点赞关注收藏,下次见~
相关文章:
关于 interface{} 会有啥注意事项?下
我们一起来回顾一下上一次说到的 interface{} 可以用来做多态 接口类型分为空接口类型和非空接口类型,他们的底层数据结构不太一样 这里顺便说一下,用来作态需要满足这样的条件: 首先得有父类指针指向子类的对象这个接口还必须是非空接口…...
ansible组件介绍和简单playbook测试
一、ansible inventory 在大规模的配置管理工作中,管理不同业务的机器,机器的信息都存放在ansible的inventory组件里面。在工作中,配置部署针对的主机必须先存放在Inventory里面,然后ansible才能对它进行操作。默认的Ansible的in…...
[数据结构]:13-插入排序(顺序表指针实现形式)(C语言实现)
目录 前言 已完成内容 插入排序实现 01-开发环境 02-文件布局 03-代码 01-主函数 02-头文件 03-PSeqListFunction.cpp 04-SortCommon.cpp 05-SortFunction.cpp 结语 前言 此专栏包含408考研数据结构全部内容,除其中使用到C引用外,全为C语言代…...
es6 new Promise
Promise 是一个构造函数,本身身上有 all、reject、resolve 这几个方法,原型上有 then、catch 等方法。所以 Promise new 出来的对象确定就有 then、catch 方法。Promise 的构造函数接收一个参数,是函数,而且传入两个参数ÿ…...
Python爬虫实战:使用Requests和BeautifulSoup爬取网页内容
标题:Python爬虫实战:使用Requests和BeautifulSoup爬取网页内容 Python爬虫技术是网络爬虫中的一种,它可以从互联网上抓取各种网页信息,如文本、图片、视频等,并将它们存储在本地数据库中。Python语言具有简单易学、语…...
质量指标——什么是增量覆盖率?它有啥用途?
目录 引言 什么是增量覆盖率 增量覆盖率有啥用途 1、对不同角色同学的用途 2、对不同规模的业务需求的用途 增量覆盖率的适用人员 增量覆盖率不太适用的情况 引言 有些质量团队,有时会拿「增量覆盖率」做出测试的准出卡点。 但在实际的使用过程中,…...
Hive---拉链表
拉链表 文章目录拉链表定义用途案例全量流程增量流程合并过程第一步第二步第三步案例二(含分区)创建外部表orders增量分区表历史记录表定义 拉链表是一种数据模型,主要是针对数据仓库设计中表存储数据的方式而定义的,顾名思义&am…...
日常文档标题级别规范
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…...
C++学习记录——십이 vector
文章目录1、vector介绍和使用2、vector模拟实现insert和erase和迭代器失效补齐其他函数深浅拷贝难点思考1、vector介绍和使用 vector可以管理任意类型的数组,是一个表示可变大小数组的序列容器。 通过vector文档来看它的使用。 #include <iostream> #inclu…...
Lombok常见用法总结
目录一、下载和安装二、常见注释(一)Data(二)Getter和Setter(三)NonNull和NotNull(不常用)(四)ToString(不常用)(五&#…...
【Ajax】异步通信
一.概述 概念:AJAX(Asynchronous JavaScript And XML):异步的 JavaScript 和 XML 作用: 与服务器进行数据交换:通过AJAX可以给服务器发送请求,并获取服务器响应的数据 使用了AJAX和服务器进行通信,就可以使…...
近红外吸收荧光染料IR-808,IR-808 NH2,IR-808 amine,发射808nm 性质分享
中文名称:IR-808 氨基英文名称:IR-808 NH2,IR-808 amine,IR-808-NH2规格标准:10mg,25mg,50mgCAS:N/A产品描述:IR-808,发射808nm,酯溶性染料修饰氨…...
一图来看你需要拥有那些知识储备
技术实践 数据 关系型数据 MySQLSQLServerOraclePostgrSQLDB2 大数据存储 RedisMemcacheMongoDBHBaseHive 大数据处理 Hadoop 数据报表看板 DataGearGrafanaKibanaMetaBase 消息对列 Rabbit MQRock MQActive MQKafka 大数据搜索 SolrElasticSearchLucenHive 服务提…...
复位和时钟控制(RCC)
目录 复位 系统复位 电源复位 备份区复位 时钟控制 什么是时钟? 时钟来源 二级时钟源: 如何使用CubeMX配置时钟 复位 系统复位 当发生以下任一事件时,产生一个系统复位:1. NRST引脚上的低电平(外部复位) 2. 窗口看门狗计数终止(WWD…...
OpenWrt 专栏介绍00
文章目录OpenWrt 专栏介绍00专栏章节介绍关于联系方式OpenWrt 专栏介绍00 专栏章节介绍 本专栏主要从开发者角度,一步步深入理解OpenWrt开发流程,本专栏包含以下章节,内如如下: 01.OperWrt 环境搭建02.OperWrt 包管理系统03.Op…...
udk开发-稀里糊涂
一、EDK2简介 1.EDK2工作流 二、EDK2 Packages 1.Packages介绍 EDK2 Packages是一个容器,其中包含一组模块及模块的相关定义。每个Package是一个EDK2单元。 整个Project的源代码可以被分割成不同的Pkg。这样的设计不仅可以降低耦合性,还有利于分…...
Java之内部类
目录 一.内部类 1.什么是内部类 2.内部类存在的原因 3. 内部类的分类 4.内部类的作用 二.成员内部类 1.基本概念 2.成员内部类的注意点 1.成员内部类可以用private方法进行修饰 2.成员内部类可以直接访问外部类的私有属性 3.外部类可以通过对象访问内部类的私有属性 …...
【MyBatis】篇二.MyBatis查询与特殊SQL
文章目录1、MyBatis获取参数值case1-单个字面量类型的参数case2-多个字面量类型的参数case3-map集合类型的参数case4-实体类类型的参数case5-使用Param注解命名参数总结2、MyBatis的各种查询功能case1-查询结果是一个实体类对象case2-查询结果是一个List集合case3-查询单个数据…...
CE认证机构和CE证书的分类
目前,CE认证已普遍被应用在很多行业的商品中,也是企业商品进入欧洲市场的必备安全合格认证。在船舶海工行业中,也同样普遍应用,很多时候,对于规范中没有明确认证要求的设备或材料,而船舶将来还会去欧洲水域…...
Lesson 8.2 CART 分类树的建模流程与 sklearn 评估器参数详解
文章目录一、CART 决策树的分类流程1. CART 树的基本生长过程1.1 规则评估指标选取与设置1.2 决策树备选规则创建方法1.3 挑选最佳分类规则划分数据集1.4 决策树的生长过程2. CART 树的剪枝二、CART 分类树的 Scikit-Learn 快速实现方法与评估器参数详解1. CART 分类树的 sklea…...
虚拟控制器驱动技术全解析:从原理到实战优化
虚拟控制器驱动技术全解析:从原理到实战优化 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 虚拟控制器驱动技术是连接物理输入设备与Windows游戏…...
构建高可用Chatbot UI完整模板:从架构设计到生产环境部署
痛点分析:Chatbot UI开发中的那些“坑” 在动手开发一个Chatbot UI之前,我们得先聊聊那些让开发者头疼的常见问题。如果你做过类似项目,下面这些场景一定不陌生: 状态管理失控:对话历史、用户输入、AI回复状态、连接…...
5步搞定OpenClaw+Qwen3-32B:RTX4090D镜像一键接入实战
5步搞定OpenClawQwen3-32B:RTX4090D镜像一键接入实战 1. 为什么选择云端沙盒方案 当我第一次听说OpenClaw这个开源自动化框架时,内心既兴奋又忐忑。作为一个喜欢折腾新技术的开发者,我迫不及待想尝试这个能像人类一样操作电脑的AI助手。但看…...
DataGrip安装使用全攻略 (DataGrip更改新建查询存储默认位置)
一、DataGrip安装 下载 DataGrip 安装包 访问 DataGrip 官网:https://www.jetbrains.com/datagrip/download ,下载 DataGrip 2025.3.5 版本的安装包: 我这里也有安装包 链接: https://pan.baidu.com/s/1g5aiHWsv9VyIhFD-7TBdEg?pwd=0908 提取码: 0908 --来自百度网盘超…...
Step3-VL-10B-Base模型微调:LSTM时间序列预测实战
Step3-VL-10B-Base模型微调:LSTM时间序列预测实战 用最简单的方式,教你如何用Step3-VL-10B-Base模型做时间序列预测,无需深厚数学背景,跟着做就能上手 1. 前言:为什么选择这个模型做时间序列预测 时间序列预测是个很有…...
从零到一:手把手教你搭建专属DNF私服服务器
1. 准备工作:搭建DNF私服需要哪些东西 第一次接触DNF私服搭建的朋友可能会觉得这是个技术活,其实只要跟着步骤来,完全可以在2小时内搞定。我自己搭建过不下10个版本的DNF私服,从60怀旧版到最新的110级版本都玩过。先说说需要准备的…...
SAMPart3D:三维模型智能分割技术的颠覆性突破
SAMPart3D:三维模型智能分割技术的颠覆性突破 【免费下载链接】SAMPart3D SAMPart3D: Segment Any Part in 3D Objects 项目地址: https://gitcode.com/gh_mirrors/sa/SAMPart3D 在工业设计领域,工程师需要花费数小时手动标注机械零件的每个组件&…...
基于LiveQing流媒体平台实现大疆无人机等RTMP推流接入轻松实现Web网页直播+录像回放
大疆无人机RTMP推流接入LiveQing,轻松实现Web网页直播录像留存 在无人机直播场景中,大疆无人机凭借出色的空中视角和稳定的图传表现,成为应急救援、工程巡检、赛事直播、国土测绘等领域的首选设备。但很多用户在使用大疆无人机直播时…...
Chatbot网页版性能优化实战:从架构设计到并发处理
1. 性能瓶颈:当用户激增时,Chatbot网页版发生了什么? 想象一下,一个原本运行平稳的Chatbot网页版,在营销活动或流量高峰期间,用户量从数百激增至数万。此时,系统往往会表现出以下典型症状&…...
论人机协同中的模糊性与不确定性
在人工智能从"工具辅助"向"智能伙伴"演进的过程中,人机协同正突破传统"人主导-机执行"的单向模式,形成双向认知交互的新型协作关系。这种关系的复杂性远超简单的人机分工——人类认知的模糊性(Fuzziness&#…...
