Go hat jetzt Generics. Du kannst die Schlüssel einer beliebigen Map mit maps.Keys
erhalten.
Beispiel Verwendung:
intMap := map[int]int{1: 1, 2: 2}
intKeys := maps.Keys(intMap)
// intKeys ist []int
fmt.Println(intKeys)
strMap := map[string]int{"alpha": 1, "bravo": 2}
strKeys := maps.Keys(strMap)
// strKeys ist []string
fmt.Println(strKeys)
maps
Package befindet sich in golang.org/x/exp/maps
. Dies ist experimentell und außerhalb der Go-Kompatibilitätsgarantie. Sie haben vor, es in die std-Lib in Go 1.19 Zukunft zu verschieben.
Playground: https://go.dev/play/p/fkm9PrJYTly
Für diejenigen, die keine exp-Pakete importieren möchten, hier ist der Quellcode (ursprünglich verfasst von Ian Lance Taylor), der wie Sie sehen können sehr einfach ist:
// Keys gibt die Schlüssel der Map m zurück.
// Die Schlüssel werden in einer unbestimmten Reihenfolge sein.
func Keys[M ~map[K]V, K comparable, V any](m M) []K {
r := make([]K, 0, len(m))
for k := range m {
r = append(r, k)
}
return r
}
HINWEIS: In Go 1.21 wurde ein Teil des maps
Pakets in die Standardbibliothek verschoben, aber nicht maps.Keys
. Für Details siehe das Go-Issue maps: remove Keys and Values for Go 1.21 tl;dr die Keys
Methode könnte eine andere Signatur haben. Daher sind die hier vorgestellten Lösungen (Verwendung von x/exp/maps
oder Kopieren des Quellcodes) auch in Go 1.21 anwendbar.