Zugriff auf Schlüssel von Karten mit unterschiedlichen Werttypen
In Go sind Karten von Natur aus generisch, aber ihr Verhalten ist aufgrund der Abwesenheit nicht kovariant von generischen Typen. Dies bedeutet, dass Sie möglicherweise auf Szenarien stoßen, in denen Sie auf Schlüssel von Karten mit unterschiedlichen Werttypen zugreifen möchten. Der Versuch, eine Schnittstelle{} als Werttyp zu verwenden, mag intuitiv erscheinen, funktioniert aber nicht wie erwartet.
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 }
Während es verständlich ist, eine elegante Lösung zu wünschen, muss man sich dessen in Go bewusst sein Möglicherweise müssen Sie bestimmte Logik für Karten mit unterschiedlichen Werttypen replizieren.
Wenn Sie jedoch die Flexibilität benötigen, Schlüssel aus einer beliebigen Karte zu erhalten, kann Reflexion hilfreich sein beschäftigt:
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) }
Dieser Ansatz ermöglicht Ihnen die Arbeit mit Karten jeglicher Art und bietet Zugriff auf deren Schlüssel.
Das obige ist der detaillierte Inhalt vonWie kann ich auf Schlüssel von Go Maps mit unterschiedlichen Werttypen zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!