我的编程空间,编程开发者的网络收藏夹
学习永远不晚

使用 Reflect 检测 nil 值

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

使用 Reflect 检测 nil 值

Golang不知道大家是否熟悉?今天我将给大家介绍《使用 Reflect 检测 nil 值》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

问题内容

我使用 reflect 包创建一个可重用的 json 解析器,该解析器在运行时将 json 数据映射到特定结构。

我希望它能够检测到特定必填字段何时缺失。

我使用以下方法创建一个变量“parsedinput”:

parsedinput := reflect.new(reflect.typeof(exampleinputobject).elem())

然后,我使用 json 库将数据解析到该变量中。我现在想要遍历这些值以发现任何缺失的内容:

for i := 0; i < parsedinput.elem().numfield(); i++ {
            logger.info("field name was: " + field.name)
            fieldtype := fmt.sprintf("'%v'", field.type.kind().string())
            logger.info("field type was: " + fieldtype)
            interfacevalue := fmt.sprintf("'%v'", parsedinput.elem().field(i).interface())
            logger.info("interface value was: " + interfacevalue)

            //look to see if the field is a null pointer.  if so, this could be an issue
            if (field.type.kind().string() == "ptr") && (parsedinput.elem().field(i).interface() == nil) {
        //do null pointer stuff here
    }
}

对于缺少的字段,我看到了日志输出

Field name was: MissingFieldName
Field type was 'ptr'
Interface value was '<nil>'

但是,我的代码永远不会陷入空指针逻辑 - 我做错了什么?


解决方案


根据上面的评论 - 我设法使用 reflect 包中的内置函数解决了这个问题 - 特别是通过测试:

Reflect.ValueOf(parsedInput.Elem().Field(i).Interface()).IsNil()

今天关于《使用 Reflect 检测 nil 值》的内容介绍就到此结束,如果有什么疑问或者建议,可以在编程网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

使用 Reflect 检测 nil 值

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用 Reflect 检测 nil 值

Golang不知道大家是否熟悉?今天我将给大家介绍《使用 Reflect 检测 nil 值》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!问题
使用 Reflect 检测 nil 值
2024-04-04

如何使用pandas中DataFrame检测重复值

这篇文章主要介绍如何使用pandas中DataFrame检测重复值,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!本文详解如何使用pandas查看dataframe的重复数据,判断是否重复,以及如何去重DataFram
2023-06-15

怎么使用mhdd检测硬盘

本篇内容介绍了“怎么使用mhdd检测硬盘”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!mhdd4.6使用方法图解:1、首先重启电脑,然后在开
2023-07-02

怎么使用jrtplib检测rtp丢包

要使用JRTPLIB检测RTP丢包,你需要按照以下步骤进行:1. 下载JRTPLIB库并将其添加到你的项目中。2. 创建一个RTP会话,这将是你接收和发送RTP数据包的地方。使用RTPSession类来实现这一点。3. 设置RTP会话的一些
2023-08-24

如何使用goby检测log4j漏洞

今天小编给大家分享一下如何使用goby检测log4j漏洞的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、前言前段时间的Lo
2023-06-29

如何使用 chromedp 检测 javascript 警报

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《如何使用 chromedp 检测 javascript 警报》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~问题内容我正在尝试识别使用 chrom
如何使用 chromedp 检测 javascript 警报
2024-04-05

如何使用shell检测网段IP使用情况

小编给大家分享一下如何使用shell检测网段IP使用情况,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!代码如下:#!/bin/bash#main---network=192.168.1ping_count=3IP=1:>I
2023-06-09

使用Android Studio检测内存泄露(LeakCanary)

内存泄露,是Android开发者最头疼的事。可能一处小小的内存泄露,都可能是毁千里之堤的蚁穴。 怎么才能检测内存泄露呢? AndroidStudio 中Memory控件台(显示器)提供了一个内存监视器。我们可以通过它方便地查看应用程序的性
2022-06-06

使用Unity怎么实现地面检测

这篇文章将为大家详细讲解有关使用Unity怎么实现地面检测,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.普通射线在角色坐标(一般是脚底),发射一根向下的射线(长度约0.2)但是简单射线只
2023-06-15

怎么在java中使用JConsole检测死锁

这篇文章将为大家详细讲解有关怎么在java中使用JConsole检测死锁,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、We
2023-06-14

使用命令行检测Ubuntu版本方法

方法一:使用lsb_release实用程序 lsb_release实用程序可以显示有关linux发WnOsvdxApj行版的LSB(Linux标准库)信息。它是检查Ubuntu版本的首选方法,无论运行的是哪个桌面环境或Ubuntu版本,此方
2022-06-04

使用OpenCV怎么实现Canny边缘检测

今天就跟大家聊聊有关使用OpenCV怎么实现Canny边缘检测,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. Canny 边缘检测理论Canny 是一种常用的边缘检测算法. 其是
2023-06-20

使用phonegap怎么检测网络的状态

使用phonegap怎么检测网络的状态?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。实例如下:
2023-06-09

怎么使用shell检测mysql连接数量

您可以使用以下命令检测MySQL连接数量:```mysqladmin -u username -p password processlist```其中,`username`和`password`分别是您的MySQL用户名和密码。执行此命令后
2023-09-25

Linux下如何使用Lm_Sensors检测cpu温度

这篇文章给大家分享的是有关Linux下如何使用Lm_Sensors检测cpu温度的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。lm_sensors 的软件可以帮助我们来监控主板,CPU 的工作电压,风扇转速、温度
2023-06-27

php中怎么使用is_array检测空数组

这篇“php中怎么使用is_array检测空数组”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php中怎么使用is_arra
2023-07-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录