Das Set-Idiom in Go
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy — Lektion 31 von 68.
Go verfügt nicht über eine integrierte Set-Datenstruktur wie viele andere Programmiersprachen. Go-Entwickler haben jedoch eine elegante Lösung unter Verwendung von Maps zur Simulation von Sets geschaffen, und dieses Muster ist so verbreitet geworden, dass es als idiomatisches Go gilt.
Das Go-Set-Idiom verwendet eine Map, bei der Sie sich nur für die Schlüssel interessieren, nicht für die Werte. Da Sie etwas als Wert speichern müssen, verwenden Go-Programmierer eine leere Struktur struct{}. Hier ist das grundlegende Muster:
var mySet map[string]struct{}Das leere Struct struct{} ist besonders, da es null Byte Speicher belegt. Dies macht es perfekt für Sets, bei denen man nur verfolgen muss, ob etwas existiert oder nicht, ohne Speicher für bedeutungslose Werte zu verschwenden.
Dieser Ansatz nutzt die grundlegende Eigenschaft von Map-Schlüsseln: Sie müssen eindeutig sein. Wenn Sie ein Element zu Ihrem Set hinzufügen, fügen Sie eigentlich einen Schlüssel zur Map hinzu. Die Eindeutigkeit wird automatisch durch das Verhalten der Map erzwungen, was Ihnen echte Set-Semantik verleiht.
In den kommenden Lektionen werden Sie lernen, wie Sie Sets mithilfe dieses idiomatischen Go-Musters erstellen, manipulieren und mit ihnen arbeiten. Diese Technik wird in Go-Codebasen häufig verwendet, um eindeutige Elemente zu verfolgen, Algorithmen zu implementieren und Probleme zu lösen, bei denen eine schnelle Prüfung auf Mitgliedschaft erforderlich ist.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Spickzettel
Go hat keine integrierte Set-Datenstruktur, verwendet jedoch Maps, um Sets mit dem idiomatischen Muster zu simulieren:
var mySet map[string]struct{}Die leere Struktur struct{} wird als Werttyp verwendet, da sie null Byte Speicher belegt. Map-Schlüssel müssen eindeutig sein, was automatisch Set-Semantik für das Verfolgen eindeutiger Elemente bietet.
Probier es selbst
Diese Lektion enthält keine Programmieraufgabe.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittener Kontrollfluss
Switch mit `fallthrough`Abbrechen von verschachtelten SchleifenFortsetzen einer bestimmten SchleifeDie `goto`-AnweisungZusammenfassung – Fortgeschrittene Schleifensteuerung4Projekt: Einfache Aufgabenliste
Projekt-SetupEine Aufgabe hinzufügen2Structs und Methoden
Methoden für Structs definierenValue ReceiverPointer ReceiverReceiver auswählenMethoden vs. FunktionenZusammenfassung – Struct-Verhalten5Maps im Detail
Maps von StructsPointer als Map-WertePrüfen auf Nil-MapsMaps vergleichenZusammenfassung – Wortfrequenz-Zähler8Projekt: Einfache Bestandsverwaltung
ProjektübersichtLagerbestand prüfen11Abschlussherausforderungen
Einfache KontaktlisteEinfacher Zahlen-ValidatorSammler für eindeutige Elemente3Interfaces (Die Grundlagen)
Was ist ein Interface?Ein Interface definierenEin Interface implementierenInterface-Typen verwendenLeeres InterfaceType AssertionsType SwitchZusammenfassung – Formen und Verhalten6Idiomatisches Go: Sets
Das Set-Idiom in GoEin Set erstellenElemente zu einem Set hinzufügenPrüfen auf MitgliedschaftAus einem Set entfernenÜber ein Set iterierenZusammenfassung – Eindeutige Benutzernamen