为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
PIPIONE 2023-05-15 14:59:23
我正在从 API 检索数据。结构输出是: {    StreamSpecification: {      StreamEnabled: true,      StreamViewType: "NEW_AND_OLD_IMAGES"     },    TableStatus: "ACTIVE"  }但是,如果 API 输出中没有 StreamSpecification,我在尝试打印结构时会收到以下错误。恐慌:运行时错误:无效内存地址或零指针取消引用 [信号 SIGSEGV:分段违规代码=0x1 地址=0x0 pc=xxxxxxxx]如何检查值中是否存在结构 StreamSpecification?或者如何以任何其他方式解决问题?
查看完整描述

2 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

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


例如:


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)                                                                                   


去游乐场


查看完整回答
反对 回复 2023-05-15
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

听起来您正在尝试访问,StreamEnabled或者StreamViewType您还没有首先确认是否StreamSpecification在 JSON 对象中提供了。


假设您将内部StreamSpecification作为对结构的引用,您需要确保它StreamSpecification不是nil:


if (instance.StreamSpecification == nil) {

    // StreamSpecification was not passed in the JSON.

}


查看完整回答
反对 回复 2023-05-15
  • 2 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信