🔑 Sortierte Schlüssel aus einer Map in Go mit Generics abrufen 🔗

In Go sind Maps von Natur aus ungeordnet. Wenn Sie mit einer for range-Schleife über eine Map iterieren, ist die Reihenfolge der Durchläufe zufällig. Vor der Einführung von Generics mussten Entwickler viel Boilerplate-Code oder typspezifische Funktionen schreiben, um die Schlüssel einer Map zu extrahieren und zu sortieren.

Mit modernen Go-Generics und den Paketen der Standardbibliothek (cmp und slices) lässt sich eine saubere, wiederverwendbare Funktion SortedKeys unkompliziert und kompakt implementieren.

📑 Inhaltsverzeichnis 🔗


💻 Die moderne Implementierung (Go 1.21+) 🔗

package main

import (
	"cmp"
	"slices"
	"fmt"
)

// SortedKeys extrahiert alle Schlüssel aus einer Map und gibt sie sortiert zurück.
// Das funktioniert für jede Map, deren Schlüsseltyp geordnet ist (Ints, Floats, Strings).
func SortedKeys[K cmp.Ordered, V any](m map[K]V) []K {
	r := make([]K, 0, len(m))
	for k := range m {
		r = append(r, k)
	}
	slices.Sort(r)
	return r
}

func main() {
	// Beispiel 1: Integer-Schlüssel
	intMap := map[int]string{3: "three", 1: "one", 2: "two"}
	fmt.Println(SortedKeys(intMap))
	// Ausgabe: [1 2 3]

	// Beispiel 2: String-Schlüssel
	strMap := map[string]int{"banana": 2, "apple": 4, "cherry": 1}
	fmt.Println(SortedKeys(strMap))
	// Ausgabe: [apple banana cherry]
}

⚙️ Wie es funktioniert 🔗

  1. Generische Typ-Constraints (K cmp.Ordered, V any):
    • K cmp.Ordered beschränkt die Map-Schlüssel auf Typen, die Vergleichsoperatoren (<, >, <=, >=) unterstützen, wie etwa Ganzzahlen, Gleitkommazahlen und Strings.
    • V any erlaubt beliebige Typen für die Map-Werte (any ist ein Alias für interface{}).
  2. Vorab-Reservierung des Slices:
    • make([]K, 0, len(m)) reserviert vorab einen Slice mit einer Kapazität in Höhe der Map-Länge und vermeidet so teure dynamische Speicher-Neuallokationen während der append-Schleife.
  3. Schlüssel extrahieren:
    • Die Schleife for k := range m sammelt alle Schlüssel im Slice.
  4. Sortieren:
    • slices.Sort(r) sortiert den Slice der Schlüssel direkt an Ort und Stelle (in-place) mithilfe der hochoptimierten Sortieralgorithmen von Go.

🚀 Warum diese Version besser ist als der Entwurf von 2020 🔗

Im Juni 2020, als sich Go-Generics noch in der Entwurfsphase befanden, mussten Entwickler eigene Typen definieren und sort.Interface manuell implementieren:

// Alter Ansatz aus dem Entwurf vor Go 1.18 (veraltet)
type Ordered interface {
	type int, int8, ... // Typlisten in Interfaces
}

type orderedSlice[T Ordered] []T
func (s orderedSlice[T]) Len() int           { return len(s) }
func (s orderedSlice[T]) Less(i, j int) bool { return s[i] < s[j] }
func (s orderedSlice[T]) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }

Heute bietet das moderne Go:


📚 Mein Kostenloses E-Book Herunterladen 🔗

Lade die kuratierte Offline-Ausgabe von Kaues Lebensweise herunter – ein praktischer Leitfaden zur Optimierung von 🍏 Gesundheit, 💰 Wohlstand, ❤️ Liebe und 🧘 Sinn.

Kaues Lebensweise

Kaues Lebensweise

📬 Meinen Newsletter Abonnieren 🔗

Erhalte eine Benachrichtigung, wenn ich neue Essays, Buchzusammenfassungen und praktische Leitfäden für ein gutes Leben veröffentliche. Kein Spam – jederzeit abbestellbar.


💬 Kommentare & Diskussion 🔗

Hast du eine Frage, eine Perspektive oder einen Vorschlag? Teile deine Gedanken unten mit. Die Kommentare werden über GitHub Discussions bereitgestellt (werbefrei und spamfrei) – klicke unten auf Mit GitHub anmelden, um zu kommentieren oder zu reagieren (ein kostenloses GitHub-Konto ist in weniger als einer Minute erstellt).



Aktualisiert am 11.10.2026.

HAFTUNGSAUSSCHLUSS: Die Inhalte auf dieser Website dienen ausschließlich Informations- und Bildungszwecken und stellen keine medizinische, psychologische, finanzielle, steuerliche oder rechtliche Beratung sowie keine Anlageberatung dar. Die hier präsentierten Ideen, Zusammenstellungen und Meinungen sind meine eigenen und spiegeln nicht die meines Arbeitgebers wider. Zusammenfassungen von Büchern, Vorträgen und Artikeln sind unabhängige Bildungskommentare und bleiben geistiges Eigentum der jeweiligen Autoren. KI-Tools können zur Unterstützung bei der Bearbeitung, Formatierung und Synthese eingesetzt werden; obwohl größte Sorgfalt auf Richtigkeit gelegt wird, können Fehler auftreten. DATENSCHUTZ: Diese Website nutzt Dienste von Drittanbietern für optionale Newsletter-Abonnements (follow.it), Kommentare (giscus / GitHub Discussions) und eingebettete Medien (YouTube), die IP-Adressen und Cookies der Besucher gemäß ihren jeweiligen Datenschutzrichtlinien verarbeiten können.