首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用reflect检测nil值

使用reflect检测nil值
EN

Stack Overflow用户
提问于 2020-05-20 15:04:59
回答 1查看 42关注 0票数 0

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

我希望它能检测到某个特定的必填字段何时丢失。

我使用以下命令创建了一个变量"parsedInput“:

代码语言:javascript
复制
parsedInput := reflect.New(reflect.TypeOf(exampleInputObject).Elem())

然后,我使用JSON库将数据解析为该变量。现在我想遍历这些值,以找出缺少的内容:

代码语言:javascript
复制
    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
    }
}

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

代码语言:javascript
复制
Field name was: MissingFieldName
Field type was 'ptr'
Interface value was '<nil>'

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

EN

回答 1

Stack Overflow用户

发布于 2020-05-20 15:27:29

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

代码语言:javascript
复制
Reflect.ValueOf(parsedInput.Elem().Field(i).Interface()).IsNil()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61907009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档