Go中interface != nil不一定不是nil

摘要:

interface{} 值 != nil不一定不是nil,应使用reflect库判断是否是nil。

测试示例:

// todo interface != nil 不一定 不是nil
var value map[string]interface{}
reqMap := make(map[string]interface{})
reqMap["key"] = valuevalue2, ok := reqMap["key"]
if ok {fmt.Print("ok = true\n")
} else {fmt.Printf("ok = false, value = %v\n", value2)
}if ok {var convertValue map[string]interface{}var newMap map[string]interface{}convertValue = value2.(map[string]interface{})newMap["new"] = convertValuefmt.Print(convertValue)
}

断点调试
在这里插入图片描述
在进行到断点处时,会报错“assignment to entry in nil map”
在这里插入图片描述

我们不能对一个map的value赋值为nil,在此处如果仅通过判断interface{}是否为nil,此处可能导致误判,所以这里建议通过反射进行判断。

修改方法


// CodeExplore .
func CodeExplore(ctx context.Context) {logs.CtxInfo(ctx, "hello world")// todo interface != nil 不一定 不是nilvar value map[string]interface{}reqMap := make(map[string]interface{})reqMap["key"] = value// 正确value3, _ := reqMap["key"]if !isNil(value3) {  // 判断结果为falsevar newMap map[string]interface{}newMap["new"] = value3}// 错误//value2, ok := reqMap["key"]//if ok {//	fmt.Print("ok = true\n")//} else {//	fmt.Printf("ok = false, value = %v\n", value2)//}//if ok {//	var convertValue map[string]interface{}//	var newMap map[string]interface{}//	convertValue = value2.(map[string]interface{})//	newMap["new"] = convertValue//	fmt.Print(convertValue)//}return
}func isNil(val interface{}) bool {if val == nil {return true}v := reflect.ValueOf(val)k := v.Kind()switch k {case reflect.Chan, reflect.Func, reflect.Map, reflect.Ptr, reflect.UnsafePointer, reflect.Interface, reflect.Slice:return v.IsNil()default:return false}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/592759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue.js 3.4版本发布:解析速度提升2倍,双向绑定革新等新功能

引言 随着2024年的来临,Vue团队的领军人物Evan You宣布了Vue.js 3.4的发布。这个版本不仅仅是修复了一些bug,还带来了一些非常实用的新功能和性能提升。 解析速度提升2倍 这次更新中,Vue.js 3.4实现了解析速度的大幅提升。尤其是在构建模板和脚本的源代码映射时,单文件组…

优维科技2024战略定位:新一代运维核心系统提供商

01 经济复苏「走远路」 过去几年,全球经济持续低迷,2024会迎来转机吗? 回顾2023年,尽管经济复苏动能式微,但全球经济因有效控制通胀而展现出来的韧性,让包括中国在内的大部分经济体躲过了深度衰退的陷阱&…

鸿蒙开发第一天

一、开发准备工作 1、开发工具的安装 1)下载地址:https://developer.huawei.com/consumer/cn/deveco-studio/ 2)查询API文档链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V2/syscap-00000014080893…

【C语言】编程世界的不朽基石与未来展望

C语言,一种经久不衰的高级编程语言,自1972年由Dennis Ritchie在AT&T贝尔实验室开发以来,已深深扎根于编程语言的发展历程中。它既是计算机科学史上的一个重要里程碑,也是现代软件开发的核心支柱。从操作系统到嵌入式系统的构建…

一篇关于大模型在信息抽取(实体识别、关系抽取、事件抽取)的研究进展综述

信息提取(IE)旨在从普通自然语言文本中提取结构化知识(如实体、关系和事件)。最近,生成式大型语言模型(LLMs)展现了在文本理解和生成方面的卓越能力,使得它们能够广泛应用于各种领域…

Java解析xml文档,判断对象是一个json是jsonArray还是jsonObject

有一篇xml文档&#xff0c;如下&#xff1a; 现在需要解析出其中的内容&#xff0c;首先需要明确的是&#xff0c;文档是由一个个的标签嵌套形成的&#xff0c;例如整个xml文件是由许多DescriptorRecord标签构成&#xff0c; <DescriptorRecord DescriptorClass "1&…

基于ssm的旅游网页开发与设计+jsp论文

摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自古…

linuxnodejs 20.* 安装问题,version `GLIBCXX_3.4.26‘

背景 今天服务器被重置拉&#xff0c;nodejs 环境不存在&#xff0c;特意安装下nodejs&#xff0c;一访问官网&#xff0c;妈呀&#xff0c;居然到20版本拉&#xff01;就尝试安装下最新版本&#xff01; 过程 $ cd /opt $ curl -OL https://nodejs.org/dist/v20.10.0/node-v2…

系列五、搭建Naco(集群版)

一、搭建Naco&#xff08;集群版&#xff09; 1.1、前置说明 &#xff08;1&#xff09;64位Red Hat7 Linux 系统&#xff1b; &#xff08;2&#xff09;64位JDK1.8&#xff1b;备注&#xff1a;如果没有安装JDK&#xff0c;请参考【系列二、Linux中安装JDK】 &#xff08;3&…

《论文阅读》基于情绪-原因转换图的共情回复生成

《论文阅读》基于情绪-原因转换图的共情回复生成 前言摘要模型架构图构建回复概念预测回复生成前言 今天为大家带来的是《EMPATHETIC RESPONSE GENERATION VIA EMOTION CAUSE TRANSITION GRAPH》 出版: 时间:2023.2.23 类型:共情对话生成 关键词:图网络;共情回复;情绪…

多粒度在研究中的应用

FontDiffuser: One-Shot Font Generation via Denoising Diffusion with Multi-Scale Content Aggregation and Style Contrastive Learning 存在的问题 现有的字体生成方法虽然取得了令人满意的性能&#xff0c;但在处理复杂字和风格变化较大的字符(尤其是中文字符)时&#x…

无边界支付:数字货币如何改变跨境电商?

在全球数字化的浪潮中&#xff0c;数字货币的崛起成为跨境电商领域的一场革命。本文将深入探讨数字货币如何重新定义支付体系&#xff0c;对跨境电商带来的影响以及未来可能的发展方向。 数字货币的崛起 随着比特币等数字货币的逐渐走俏&#xff0c;传统支付体系的边界逐渐被打…

TinyEngine 服务端正式开源啦!!!

背景介绍 TinyEngine 低代码引擎介绍 随着企业对于低代码开发平台的需求日益增长&#xff0c;急需一个通用的解决方案来满足各种低代码平台的开发需求。正是在这种情况下&#xff0c;低代码引擎应运而生。它是一种通用的开发框架&#xff0c;通过对低代码平台系统常用的功能进…

数脉观察二丨 详解CroPoolv2.0锁仓收益机制 文末附锁仓教程

1月1日元旦佳节期间&#xff0c;CyberVein基金会支持打造的CroPoolv2.0最新版本正式上线&#xff0c;获得了圈内媒体和知名KOL多方的关注&#xff0c;在Staking领域掀起了热议&#xff0c;用户可以前往CroPool.net进行锁仓体验。 CroPool v2.0新增“锁仓”功能板块&#xff0c…

qt下载与安装

下载安装包网址&#xff1a; Index of /qt/official_releases/online_installers/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror https://download.qt.io/archive/qt/ 安装&#xff0c;一路next 先不管他&#xff0c;直接下一步

代表团坐车 - 华为OD统一考试

OD统一考试(B卷) 分值: 100分 题解: Java / Python / C++ 题目描述 某组织举行会议,来了多个代表团同时到达,接待处只有一辆汽车可以同时接待多个代表团,为了提高车辆利用率,请帮接待员计算可以坐满车的接待方案输出方案数量。 约束: 一个团只能上一辆车,并且代表团…

两个眼前一亮的工作!已开源,可在线体验!

大家好&#xff0c;我是阿潘&#xff0c;2024 年&#xff0c;新年首个工作日&#xff0c;公司引来组织架构调整&#xff0c;两个工程师和一个产品并入业务线&#xff0c;直面业务大佬的压榨&#xff01; 第一天就搞大事情&#xff0c;希望新的一年&#xff0c;我们都能迎来爆发…

【elfboard linux开发板】7.i2C工具应用与aht20温湿度寄存器读取

1. I2C工具查看aht20的温湿度寄存器值 1.1 原理图 传感器通过IIC方式进行通信&#xff0c;连接的为IIC1总线&#xff0c;且设备地址为0x38&#xff0c;实际上通过后续iic工具查询&#xff0c;这个设备是挂载在iic-0上 1.2 I2C工具 通过i2c工具可以实现查询i2c总线、以及上面…

Mac环境下反编译apk

Mac环境下反编译apk 安装反编译工具dex2jar&#xff1a;[官网下载](https://sourceforge.net/projects/dex2jar/)JD-GUI&#xff1a;[官网下载](https://jd-gui.apponic.com/) 实操1. 将需要反编译的 .apk 文件放在下载的 dex2jar 文件夹目录下2. 使用 cd /xxx/dex2jar-2.0 命令…

苹果手机怎么备份数据?方法在这,记得收藏!

苹果手机不仅具有卓越的用户体验&#xff0c;还具有强大的功能&#xff0c;因此受到了广大用户的喜爱。然而&#xff0c;在享受其带来的便捷的同时&#xff0c;我们也需要着重关注手机数据的安全。 一旦数据丢失或损坏&#xff0c;可能会对我们的生活和工作造成重大影响。那么…