Heim > Backend-Entwicklung > Golang > Wie kann ich in Go mit Karten mit unterschiedlichen Werttypen, aber demselben Schlüsseltyp umgehen?

Wie kann ich in Go mit Karten mit unterschiedlichen Werttypen, aber demselben Schlüsseltyp umgehen?

Mary-Kate Olsen
Freigeben: 2024-12-27 04:15:10
Original
920 Leute haben es durchsucht

How Can I Handle Maps with Different Value Types But the Same Key Type in Go?

Überwindung von Typunterschieden bei der Kartenverarbeitung

Problem:
Bei der Arbeit mit Karten in Go ist es oft wünschenswert, Schlüssel von zu verwenden vom gleichen Typ, aber Werte unterschiedlichen Typs. Beim Versuch, eine Funktion zu erstellen, die einen Schlüsseltyp mit Schnittstelle{} als Werttyp verwendet, gibt es jedoch eine Einschränkung.

Fehlgeschlagener Ansatz:

func main() {
    mapOne := map[string]int
    mapTwo := map[string]double
    mapThree := map[string]SomeStruct

    useKeys(mapOne)
}

func useKeys(m map[string]interface{}) {
    //something with keys here
}
Nach dem Login kopieren

Der obige Code lässt sich aufgrund einer Typinkongruenz nicht kompilieren. Karten in Go sind nicht kovariant, was bedeutet, dass sie keine unterschiedlichen Werttypen mit demselben Schlüsseltyp akzeptieren können.

Lösung:

Es gibt zwar keine elegante Lösung für dieses Problem Für die inhärenten Einschränkungen von Go gibt es eine Problemumgehung mithilfe von Reflection:

func useKeys(m interface{}) {
    v := reflect.ValueOf(m)
    if v.Kind() != reflect.Map {
        fmt.Println("not a map!")
        return
    }

    keys := v.MapKeys()
    fmt.Println(keys)
}
Nach dem Login kopieren

Dieser Code verwendet einen Interface{}-Wert und verwendet Reflection, um zu bestimmen, ob es sich um einen handelt Karte. Wenn dies der Fall ist, werden die Schlüssel für diese Karte extrahiert und gedruckt.

Hinweis:

Es ist wichtig, sich der Einschränkungen der Verwendung von Reflektion bewusst zu sein, soweit dies möglich ist führen zu Mehraufwand und Komplexität bei der Laufzeitleistung. Wenn möglich, bleibt die Verwendung bestimmter Kartentypen für bestimmte Werttypen der bevorzugte Ansatz für Leistung und Wartbarkeit.

Das obige ist der detaillierte Inhalt vonWie kann ich in Go mit Karten mit unterschiedlichen Werttypen, aber demselben Schlüsseltyp umgehen?. 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