Heim >Backend-Entwicklung >Golang >Wie kann ich in Go unabhängig vom Werttyp auf Zuordnungsschlüssel zugreifen?

Wie kann ich in Go unabhängig vom Werttyp auf Zuordnungsschlüssel zugreifen?

Barbara Streisand
Barbara StreisandOriginal
2025-01-01 07:35:10895Durchsuche

How Can I Access Map Keys in Go Regardless of Value Type?

Arbeiten mit Karten mit unterschiedlichen Werttypen

In Go sind Karten vielseitige Datenstrukturen, die Schlüssel bestimmten Werten zuordnen. Es kann jedoch vorkommen, dass wir die Schlüssel mehrerer Karten verwenden möchten, auch wenn sich ihre Werttypen unterscheiden. Betrachten Sie den folgenden Codeausschnitt:

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
}

In diesem Beispiel haben wir drei Karten: mapOne enthält Ganzzahlen, mapTwo speichert Doppelwerte und mapThree enthält Instanzen von SomeStruct. Unser Ziel ist es, eine Funktion useKeys zu erstellen, die eine Zuordnung mit Zeichenfolgenschlüsseln und einem beliebigen Werttyp akzeptiert, der durch interface{} bezeichnet wird. Dieses Design funktioniert jedoch nicht wie erwartet.

Die Herausforderung der Kovarianz

In Go sind Karten und Slices generische Strukturen, denen es jedoch an Kovarianz mangelt. Dies bedeutet, dass Sie einer Variablen vom Typ „map[string]interface{} zwar eine Map[string]int zuweisen können, Sie die Werte der zugewiesenen Map jedoch nicht sicher ändern können, ohne Fehler zu verursachen.

Eine weniger elegante, Aber funktionale Lösung

Wenn wir lediglich die Schlüssel einer Karte unabhängig von ihrem Werttyp erhalten müssen, können wir auf Reflexion zurückgreifen:

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)
}

Das ist bei dieser Lösung nicht der Fall so elegant, wie wir es gerne hätten, aber es ruft effektiv die Schlüssel jeder an ihn übergebenen Karte ab und druckt sie, unabhängig von den enthaltenen Werttypen.

Das obige ist der detaillierte Inhalt vonWie kann ich in Go unabhängig vom Werttyp auf Zuordnungsschlüssel zugreifen?. 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