Indizierungsschnittstellenschnittstellen: Adressierungsschnittstelle {} Indexierungsfehler
Bei der Arbeit mit verschachtelten JSON-Antworten kommt es nicht selten vor, dass der Fehler „ungültig“ auftritt Operation: Typschnittstelle {} unterstützt keine Indizierung.“ Dies tritt auf, wenn versucht wird, auf verschachtelte Werte in einer schnittstellentypisierten Variablen zuzugreifen, die korrekte Typzusicherung jedoch nicht angewendet wird.
Betrachten Sie das folgende Beispiel und gehen Sie von einer JSON-Antwort wie der bereitgestellten aus:
<code class="go">var d interface{} json.NewDecoder(response.Body).Decode(&d) test := d["data"].(map[string]interface{})["type"]</code>
Die Zeile, die versucht, auf den Wert „type“ zuzugreifen, löst einen Indexierungsfehler aus, da d vom Typ interface{} ist, der keine Array-ähnliche Indizierung unterstützt. Um dieses Problem zu lösen, müssen wir „asset d“ in den entsprechenden Typ eingeben, in diesem Fall ein „map[string]interface{}:
<code class="go">test := d.(map[string]interface{})["data"].(map[string]interface{})["type"]</code>
Diese verschachtelte Typzusicherung ermöglicht uns den Zugriff auf den „Typ“-Wert erfolgreich.
Alternativ können Sie den Typ von d als map[string]interface{} von Anfang an angeben:
<code class="go">var d map[string]interface{} json.NewDecoder(response.Body).Decode(&d) test := d["data"].(map[string]interface{})["type"]</code>
Indem Sie d als map[string]interface{} deklarieren , die erste Typzusicherung ist redundant.
Wenn Sie ähnliche Vorgänge wiederholt ausführen, sollten Sie außerdem die Verwendung der Bibliothek github.com/icza/dyno in Betracht ziehen, um die Arbeit mit dynamischen Objekten zu erleichtern.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit den Fehlern „Ungültiger Vorgang: Typschnittstelle {} unterstützt keine Indizierung' in Go um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!