猿问

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

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


 {

    StreamSpecification: {

      StreamEnabled: true,

      StreamViewType: "NEW_AND_OLD_IMAGES"

     },

    TableStatus: "ACTIVE"

  }

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


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


如何检查值中是否存在结构 StreamSpecification?或者如何以任何其他方式解决问题?


PIPIONE
浏览 110回答 2
2回答

人到中年有点甜

如果我正确理解问题,我会将结构转换为地图,然后检查您感兴趣的字段是否在地图中。例如: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)                                                                                   } 去游乐场

吃鸡游戏

听起来您正在尝试访问,StreamEnabled或者StreamViewType您还没有首先确认是否StreamSpecification在 JSON 对象中提供了。假设您将内部StreamSpecification作为对结构的引用,您需要确保它StreamSpecification不是nil:if (instance.StreamSpecification == nil) {    // StreamSpecification was not passed in the JSON.}
随时随地看视频慕课网APP

相关分类

Go
我要回答