Zusammenfassung – Eindeutige Benutzernamen
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy — Lektion 37 von 68.
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.
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