Heim > Backend-Entwicklung > Golang > Warum führt der Zugriff auf „map[string]interface{}' in Go zu dem Fehler „Typschnittstelle {} unterstützt keine Indizierung'?

Warum führt der Zugriff auf „map[string]interface{}' in Go zu dem Fehler „Typschnittstelle {} unterstützt keine Indizierung'?

Mary-Kate Olsen
Freigeben: 2024-12-07 12:29:13
Original
614 Leute haben es durchsucht

Why Does Accessing `map[string]interface{}` in Go Result in a

Syntaxfehler: Indexzugriff für Schnittstellentyp verweigert

Bei der Arbeit mit Karten vom Typ „map[string]interface{}“ in Go ist dies der Fall Es ist wichtig zu verstehen, warum der Zugriff auf Werte mithilfe der Indexnotation zu der frustrierenden Meldung „Typschnittstelle {} unterstützt keine Indizierung“ führen kann. Fehler.

Die Grundursache: Interface{}

Interface{} in Go fungiert als Chamäleon eines Typsystems und ermöglicht es, Objekte verschiedener Typen in einem einzigen zu halten Variable oder durch Funktionen übergeben werden. Allerdings hat die Flexibilität ihren Preis: interface{} definiert keine spezifischen Methoden oder Eigenschaften, sodass es unmöglich ist, Aktionen wie die Indizierung direkt auf der Schnittstelle durchzuführen.

So lösen Sie das Problem

Um dieses Indexierungsproblem zu lösen, müssen wir den Wert der Schnittstelle{} explizit in den richtigen Typ umwandeln. Go bietet eine Reihe von Type-Casting-Operatoren, um diesen Prozess zu erleichtern. Schauen wir uns ein Beispiel genauer an:

package main

import (
    "fmt"
)

type Host struct {
    Name string
}

func main() {
    Map := make(map[string]interface{})
    Map["hosts"] = []Host{Host{"test.com"}, Host{"test2.com"}}

    // Type cast the interface{} to a slice of Host
    hm := Map["hosts"].([]Host)
    fmt.Println(hm[0])
}
Nach dem Login kopieren

In diesem Beispiel haben wir eine Map[string]Schnittstelle{} mit dem Namen „Map“, in der wir ein Segment von Host-Objekten als Wert gespeichert haben, der mit „ verknüpft ist. Hosts“-Taste. Um von diesem Slice aus auf ein Element zuzugreifen, geben wir den in Map["hosts"] gespeicherten Wert interface{} in einen Slice von Host um.

Playground Link

Um mit diesem Code zu experimentieren und das Ergebnis aus erster Hand zu erleben, navigieren Sie zu folgendem Link: [Playground Link](https://go.dev/play/p/dJrycL1QD0C)

Das obige ist der detaillierte Inhalt vonWarum führt der Zugriff auf „map[string]interface{}' in Go zu dem Fehler „Typschnittstelle {} unterstützt keine Indizierung'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage