Zusammenfassung – Eindeutige Benutzernamen
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy. Lektion 37 von 68.
Aufgabe
EinfachErstelle ein Benutzernamen-Registrierungssystem, das doppelte Benutzernamen mithilfe des Go-Set-Idioms verhindert. Diese Aufgabe zeigt, wie man ein robustes Benutzerverwaltungssystem erstellt, das die Eindeutigkeit von Benutzernamen bei allen Registrierungen sicherstellt.
Du erhältst zwei Eingaben:
- Eine Zeichenkette mit vorhandenen Benutzernamen, die durch Kommas getrennt sind (z. B.
"alice123,bob_dev,charlie2024,diana_codes") - Eine Zeichenkette mit neuen Registrierungsversuchen für Benutzernamen, die durch Kommas getrennt sind (z. B.
"eve_user,alice123,frank_dev,bob_dev,grace2024,alice123")
Deine Aufgabe ist es:
- Erstelle mithilfe des Go-Idioms
map[string]struct{}ein Set, in dem registrierte Benutzernamen gespeichert werden - Analysiere die erste Eingabezeichenkette, indem du sie an Kommas aufteilst, um die vorhandenen Benutzernamen zu erhalten
- Füge jeden vorhandenen Benutzernamen mithilfe des leeren Struct-Literals
{}als Wert zu deinem Set hinzu - Analysiere die zweite Eingabezeichenkette, indem du sie an Kommas aufteilst, um neue Registrierungsversuche zu erhalten
- Prüfe für jeden Registrierungsversuch mithilfe des Komma-ok-Idioms, ob der Benutzername bereits im Set vorhanden ist
- Zeige den Registrierungsprozess für jeden Versuch an:
- Wenn der Benutzername verfügbar ist:
"Registered: [username]"und füge ihn zum Set hinzu - Wenn der Benutzername bereits vorhanden ist:
"Username taken: [username]"
- Wenn der Benutzername verfügbar ist:
- Zeige nach der Verarbeitung 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]"
- Liste schließlich alle im System registrierten Benutzernamen auf:
- Überschrift:
"All registered usernames:" - Jeder Benutzername in einer eigenen Zeile:
"@[username]"
- Überschrift:
Verwende das Paket strings, um die Eingabezeichenketten an Kommas aufzuteilen. Diese Aufgabe zeigt, wie das Go-Set-Idiom eine effiziente Lösung zur Vermeidung von Duplikaten in Benutzerregistrierungssystemen bietet, die Datenintegrität sicherstellt und gleichzeitig eine schnelle Suchleistung bei der Validierung von Benutzernamen ermöglicht.
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Übe selbstständig: Online-Go-Compiler