Indizieren von Schnittstellentypen in Go: Beheben des Fehlers „Ungültiger Vorgang“
In Go tritt der Fehler „Ungültiger Vorgang: Typschnittstelle {“ auf } unterstützt keine Indexierung“, wenn der Versuch, einen Schnittstellentyp (interface{}) zu indizieren, frustrierend sein kann. Dieser Fehler tritt auf, wenn Sie versuchen, auf ein Feld oder eine Methode einer Schnittstelle zuzugreifen, ohne es zuvor einem bestimmten Datentyp zuzuordnen.
Problem:
Bedenken Sie den folgenden Codeausschnitt :
<code class="go">var d interface{} json.NewDecoder(response.Body).Decode(&d) test := d["data"].(map[string]interface{})["type"]</code>
Beim Versuch, auf das Feld „Typ“ der in d gespeicherten verschachtelten JSON-Antwort zuzugreifen, kann der Fehler „Ungültiger Vorgang“ auftreten. Dies liegt daran, dass d vom Typ interface{} ist, der über jeden Typ abstrahiert und die Indizierung grundsätzlich nicht unterstützt.
Lösung:
Um diesen Fehler zu beheben, benötigen Sie um Typzusicherungen durchzuführen, um die Schnittstelle in einen bekannten Typ zu konvertieren, der die Indizierung unterstützt. Da Sie in diesem Fall davon ausgehen, dass d eine Karte ist, können Sie den folgenden Code verwenden:
<code class="go">test := d.(map[string]interface{})["data"].(map[string]interface{})["type"] fmt.Println(test)</code>
Zuerst stellen Sie fest, dass d eine Karte[string]schnittstelle{} ist. Dadurch können Sie es anhand von Zeichenfolgenschlüsseln indizieren. Dann greifen Sie auf das Feld „Daten“ zu und wiederholen den Assertionsprozess, um seinen Wert zu erhalten.
Alternativer Ansatz:
Alternativ können Sie d als Karte deklarieren[ string]interface{} direkt, wodurch die Notwendigkeit der ersten Typzusicherung entfällt:
<code class="go">var d map[string]interface{} if err := json.NewDecoder(response.Body).Decode(&d); err != nil { panic(err) } test := d["data"].(map[string]interface{})["type"] fmt.Println(test)</code>
Dieser Code behält die gleiche Funktionalität wie der vorherige Ansatz.
Zusätzlicher Hinweis:
Wenn dieses Indizierungsproblem häufig auftritt, sollten Sie die Verwendung einer Bibliothek wie github.com/icza/dyno in Betracht ziehen, die die Arbeit mit dynamischen Objekten in Go vereinfacht.
Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „Ungültiger Vorgang: Typschnittstelle {} unterstützt keine Indizierung' in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!