Как проверить, существует ли значение структуры в структуре - PullRequest
0 голосов
/ 09 декабря 2018

Я получаю данные из API.Вывод структуры:

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

Но если в выводе API отсутствует StreamSpecification, я получаю следующую ошибку при попытке напечатать структуру.

panic:ошибка времени выполнения: неверный адрес памяти или разыменование нулевого указателя [сигнал SIGSEGV: код нарушения сегментации = 0x1 addr = 0x0 pc = xxxxxxxx]

Как проверить, существует ли в значении struct StreamSpecification?Или как решить проблему другим способом?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Если я правильно понял вопрос, я преобразовал бы структуру в карту, а затем проверил, находится ли интересующее вас поле на карте.

Например:

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

0 голосов
/ 09 декабря 2018

Звучит так, как будто вы пытаетесь получить доступ к StreamEnabled или StreamViewType, когда вы впервые не подтвердили, было ли StreamSpecification предоставлено в объекте JSON.

Предполагается, что у вас есть внутренний StreamSpecification как ссылка на структуру, вы должны убедиться, что StreamSpecification не nil:

if (instance.StreamSpecification == nil) {
    // StreamSpecification was not passed in the JSON.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...