Ich habe die folgende StrukturWie für die Existenz des Schlüssels in einer verschachtelten Struktur
type GiphyJson struct {
Type string `json:"type"`
Data []struct {
Images struct {
Fixed_height struct {
Url string `json:"url"`
} `json:"fixed_height"`
} `json:"images"`
} `json:"data"`
}
und ich Data[x].Images.Fixed_height.Url
zugreifen müssen überprüfen. Idealerweise würde ich gerne vor jedem Zugriff auf Url nach der Existenz der einzelnen Eigenschaften 'Data, Images,, Fixed_height' suchen wollen, um sicherzustellen, dass ich keine Null-Zeiger-Ausnahmen habe. Da ich ziemlich neu in der Sprache bin, war ich neugierig, was der idiomatische Weg wäre, dies zu tun.
Folgendes ist, wie ich die Struktur verwende.
var err error
var giphyJson GiphyJson
keyword = url.QueryEscape(keyword)
resp, err := http.Get("http://api.giphy.com/v1/gifs/search?q=" + keyword + "&api_key=dc6zaTOxFJmzC&limit=100")
if err != nil {
err = errors.New("An error occured trying to contact giphy")
return "", err
}
defer resp.Body.Close()
bodyBytes, err := ioutil.ReadAll(resp.Body)
err = json.Unmarshal(bodyBytes, &giphyJson)
Die Antwort hängt nur von dem Typ ab, in dem Sie Ihren JSON entpacken. Z.B. Wenn Sie in struct keine Zeiger enthalten, gibt es keine Ausnahme für den nil-Zeiger. Bitte Code anzeigen. – Volker
@Volker ist das nicht die Strukturdefinitionen dort? Es hat keine Zeiger ... zum OP, das einzige, was Sie wirklich überprüfen müssen, ist, dass 'length (Data)> x' – evanmcdonnal
In der obigen Struktur würden Sie überprüfen, dass len (Daten)> 0; Images, Fixed_height und Url haben immer Werte (auch wenn sie nicht in JSON existieren, werden sie auf ihren Nullwert in der Struktur initialisiert). –