duangan4070 2018-12-09 19:28
浏览 14
已采纳

如何检查结构中是否存在结构值

I am retrieving data from an API. The struct output is :

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

But if the API output does not have StreamSpecification in it, I am receiving the following error when trying to print the struct.

panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=xxxxxxxx]

How to check if the struct StreamSpecification exists in the value? Or how to fix the issue in any other way?

  • 写回答

2条回答 默认 最新

  • dqcj32855 2018-12-09 22:22
    关注

    If I understand the question correctly, I would convert the struct into a map, and then check if the field you are interested in is in the map.

    For example:

    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
    ", ok)                                                                                       
    
        _, ok = myMap["Location"]                                                                                                      
        fmt.Printf("Location is in myMap: %t
    ", ok)                                                                                   
    
    } 
    

    Go Playground

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)