Heim >Backend-Entwicklung >Golang >Wie iteriere ich über eine von einer Schnittstelle reflektierte Karte{}?

Wie iteriere ich über eine von einer Schnittstelle reflektierte Karte{}?

DDD
DDDOriginal
2024-12-01 00:52:11540Durchsuche

How to Iterate Over a Map Reflected from an Interface{}?

Iterieren über eine von einer Schnittstelle reflektierte Karte

F: Schnittstelle{} in Karte konvertieren und darüber iterieren

In einem Versuch, eine generische Funktion zu erstellen, die verschiedene Datenstrukturen akzeptieren kann, einschließlich Strukturen, Struktursegmente und Karten mit Zeichenfolgenschlüsseln und Strukturwerten, Beim Versuch, eine Karte zu durchlaufen, tritt ein Fehler auf. Wenn man über die Schnittstelle nachdenkt, erkennt man, dass es sich tatsächlich um eine Karte handelt, der Zugriff auf ihre Elemente durch Bereichsiteration jedoch zu einem Fehler führt.

A: Verwendung eines Typschalters oder von Value.MapKeys

Es gibt zwei Ansätze, dieses Problem zu lösen:

  1. Typ Schalter:

    • Ersetzen Sie Ihre Verwendung von Reflexion durch einen Typschalter, um den spezifischen Typ des Eingabeparameters zu überprüfen.
    • Für Beispiel:

      switch in := in.(type) {
      case map[string]*Book:
          for key, value := range in {
              fmt.Printf("Key: %s, Value: %v\n", key, value)
          }
      default:
          // Handle other cases as needed.
      }
  2. Value.MapKeys:

    • Wenn Sie darauf bestehen, Reflektion zu verwenden, tun Sie kann Value.MapKeys verwenden, um die Schlüssel der Karte abzurufen.
    • Für Beispiel:

      v := reflect.ValueOf(in)
      keys := v.MapKeys()
      for _, key := range keys {
          value := v.MapIndex(key)
          fmt.Printf("Key: %v, Value: %v\n", key.Interface(), value.Interface())
      }

Das obige ist der detaillierte Inhalt vonWie iteriere ich über eine von einer Schnittstelle reflektierte Karte{}?. 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