登录
首页 >  Golang >  Go问答

如何检测结构体中的结构体值

来源:stackoverflow

时间:2024-03-12 13:00:30 260浏览 收藏

今天golang学习网给大家带来了《如何检测结构体中的结构体值》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

我正在从 api 检索数据。 结构输出是:

{
    StreamSpecification: {
      StreamEnabled: true,
      StreamViewType: "NEW_AND_OLD_IMAGES"
     },
    TableStatus: "ACTIVE"
  }

但是,如果 api 输出中没有 streamspecification,我在尝试打印结构时会收到以下错误。

恐慌:运行时错误:无效的内存地址或零指针取消引用 [信号sigsegv:分段违规代码=0x1 addr=0x0 pc=xxxxxxxx]

如何检查值中是否存在 struct streamspecification?或者如何以其他方式解决该问题?


解决方案


如果我正确理解了问题,我会将结构体转换为映射,然后检查您感兴趣的字段是否在映射中。

例如:

package main                                                                                                                       

import (                                                                                                                           
    "encoding/json"                                                                                                                
    "fmt"                                                                                                                          
)                                                                                                                                  

type mystruct struct {                                                                                                             
    name  string                                                                                                                   
    score int                                                                                                                      
}                                                                                                                                  

func main() {                                                                                                                      

    ms := mystruct{name: "amy", score: 34}                                                                                         

    var mymap map[string]interface{}                                                                                               
    data, _ := json.marshal(ms)                                                                                                    
    fmt.println(data)                                                                                                              

    json.unmarshal(data, &mymap)                                                                                                   

    fmt.println(mymap)                                                                                                             

    _, ok := mymap["name"]                                                                                                         
    fmt.printf("name is in mymap: %t\n", ok)                                                                                       

    _, ok = mymap["location"]                                                                                                      
    fmt.printf("location is in mymap: %t\n", ok)                                                                                   

}

Go Playground

听起来您正在尝试访问 streamenabledstreamviewtype,但您尚未首先确认 json 对象中是否提供了 streamspecification

假设您有内部 streamspecification 作为对结构的引用,您需要确保 streamspecification 不是 nil

if (instance.StreamSpecification == nil) {
    // StreamSpecification was not passed in the JSON.
}

终于介绍完啦!小伙伴们,这篇关于《如何检测结构体中的结构体值》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>