Heim  >  Artikel  >  Backend-Entwicklung  >  Wie behebe ich den Fehler „Ungültiger Vorgang: Typschnittstelle {} unterstützt keine Indizierung“ in Go?

Wie behebe ich den Fehler „Ungültiger Vorgang: Typschnittstelle {} unterstützt keine Indizierung“ in Go?

Linda Hamilton
Linda HamiltonOriginal
2024-10-27 04:44:30510Durchsuche

How to Resolve the

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn