Zusammenfassung – Eindeutige Benutzernamen
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy — Lektion 37 von 68.
Aufgabe
EinfachErstellen Sie ein System zur Registrierung von Benutzernamen, das doppelte Benutzernamen mithilfe des Go-Set-Idioms verhindert. Diese Herausforderung zeigt, wie man ein robustes Benutzerverwaltungssystem erstellt, das die Eindeutigkeit von Benutzernamen über alle Registrierungen hinweg sicherstellt.
Sie erhalten zwei Eingaben:
- Einen String, der bestehende Benutzernamen enthält, getrennt durch Kommas (z. B.
"alice123,bob_dev,charlie2024,diana_codes") - Einen String, der neue Registrierungsversuche für Benutzernamen enthält, getrennt durch Kommas (z. B.
"eve_user,alice123,frank_dev,bob_dev,grace2024,alice123")
Ihre Aufgabe ist es:
- Erstellen Sie ein Set unter Verwendung des Go-Idioms
map[string]struct{}, um registrierte Benutzernamen zu speichern - Verarbeiten Sie den ersten Eingabestring, indem Sie ihn an den Kommas aufteilen, um die vorhandenen Benutzernamen zu erhalten
- Fügen Sie jeden vorhandenen Benutzernamen zu Ihrem Set hinzu, wobei Sie das leere Struct-Literal
{}als Wert verwenden - Verarbeiten Sie den zweiten Eingabestring, indem Sie ihn an den Kommas aufteilen, um die neuen Registrierungsversuche zu erhalten
- Prüfen Sie für jeden Registrierungsversuch mithilfe des Comma-Ok-Idioms, ob der Benutzername bereits im Set vorhanden ist
- Zeigen Sie den Registrierungsprozess für jeden Versuch an:
- Wenn der Benutzername verfügbar ist:
"Registered: [username]"und fügen Sie ihn dem Set hinzu - Wenn der Benutzername bereits existiert:
"Username taken: [username]"
- Wenn der Benutzername verfügbar ist:
- Zeigen Sie nach der Bearbeitung aller Registrierungsversuche eine umfassende Zusammenfassung an:
"Registration Summary:""Initial usernames: [initial_count]""Registration attempts: [attempts_count]""Successful registrations: [successful_count]""Rejected (duplicate): [rejected_count]""Total registered usernames: [total_count]"
- Listen Sie abschließend alle im System registrierten Benutzernamen auf:
- Header:
"All registered usernames:" - Jeder Benutzername in einer eigenen Zeile:
"@[username]"
- Header:
Verwenden Sie das strings-Paket, um die Eingabestrings an den Kommas aufzuteilen. Diese Herausforderung zeigt, wie das Go-Set-Idiom eine effiziente Lösung zur Vermeidung von Duplikaten in Benutzerregistrierungssystemen bietet und die Datenintegrität gewährleistet, während es gleichzeitig eine schnelle Lookup-Performance für die Validierung von Benutzernamen bietet.
Probier es selbst
package main
import (
"fmt"
"sort"
"strings"
)
func main() {
// Eingabe lesen
var existingUsernames string
var newRegistrations string
fmt.Scanln(&existingUsernames)
fmt.Scanln(&newRegistrations)
// Eingabestrings parsen
existing := strings.Split(existingUsernames, ",")
attempts := strings.Split(newRegistrations, ",")
// Set mit Go-Idiom erstellen
userSet := make(map[string]struct{})
// TODO: Schreiben Sie Ihren Code unten
// 1. Bestehende Benutzernamen zum Set hinzufügen
// 2. Jeden Registrierungsversuch verarbeiten
// 3. Registrierungsergebnisse für jeden Versuch anzeigen
// 4. Zusammenfassung berechnen und anzeigen
// 5. Alle registrierten Benutzernamen auflisten (Sortierung für konsistente Ausgabe nicht vergessen)
}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