Récapitulatif - Noms d'utilisateur uniques
Fait partie de la section Logique & Flux du Journey GO de Coddy. Leçon 37 sur 68.
Défi
FacileCréez un système d’enregistrement des noms d’utilisateur qui empêche les doublons en utilisant l’idiome des ensembles de Go. Ce défi montre comment créer un système robuste de gestion des utilisateurs qui garantit l’unicité des noms d’utilisateur pour toutes les inscriptions.
Vous recevrez deux entrées :
- Une chaîne contenant les noms d’utilisateur existants, séparés par des virgules (par exemple,
"alice123,bob_dev,charlie2024,diana_codes") - Une chaîne contenant les tentatives d’inscription de nouveaux noms d’utilisateur, séparées par des virgules (par exemple,
"eve_user,alice123,frank_dev,bob_dev,grace2024,alice123")
Votre tâche consiste à :
- Créer un ensemble à l’aide de l’idiome Go
map[string]struct{}pour stocker les noms d’utilisateur enregistrés - Analyser la première chaîne d’entrée en la divisant sur les virgules afin d’obtenir les noms d’utilisateur existants
- Ajouter chaque nom d’utilisateur existant à votre ensemble en utilisant le littéral de structure vide
{}comme valeur - Analyser la deuxième chaîne d’entrée en la divisant sur les virgules afin d’obtenir les nouvelles tentatives d’inscription
- Pour chaque tentative d’inscription, vérifier si le nom d’utilisateur existe déjà dans l’ensemble en utilisant l’idiome comma ok
- Afficher le processus d’inscription pour chaque tentative :
- Si le nom d’utilisateur est disponible :
"Registered: [username]"et l’ajouter à l’ensemble - Si le nom d’utilisateur existe déjà :
"Username taken: [username]"
- Si le nom d’utilisateur est disponible :
- Après avoir traité toutes les tentatives d’inscription, afficher un récapitulatif complet :
"Registration Summary:""Initial usernames: [initial_count]""Registration attempts: [attempts_count]""Successful registrations: [successful_count]""Rejected (duplicate): [rejected_count]""Total registered usernames: [total_count]"
- Enfin, lister tous les noms d’utilisateur enregistrés dans le système :
- En-tête :
"All registered usernames:" - Chaque nom d’utilisateur sur une ligne distincte :
"@[username]"
- En-tête :
Utilisez le package strings pour diviser les chaînes d’entrée sur les virgules. Ce défi montre comment l’idiome des ensembles de Go offre une solution efficace pour empêcher les doublons dans les systèmes d’inscription des utilisateurs, en garantissant l’intégrité des données tout en offrant des performances de recherche rapides pour la validation des noms d’utilisateur.
Essayez vous-même
package main
import (
"fmt"
"sort"
"strings"
)
func main() {
// Lire l'entrée
var existingUsernames string
var newRegistrations string
fmt.Scanln(&existingUsernames)
fmt.Scanln(&newRegistrations)
// Analyser les chaînes d'entrée
existing := strings.Split(existingUsernames, ",")
attempts := strings.Split(newRegistrations, ",")
// Créer un ensemble en utilisant l'idiome Go
userSet := make(map[string]struct{})
// TODO: Écrivez votre code ci-dessous
// 1. Ajouter les noms d'utilisateur existants à l'ensemble
// 2. Traiter chaque tentative d'inscription
// 3. Afficher les résultats d'inscription pour chaque tentative
// 4. Calculer et afficher le résumé
// 5. Lister tous les noms d'utilisateur inscrits (n'oubliez pas de trier pour une sortie cohérente)
}Toutes les leçons de Logique & Flux
1Structures de contrôle avancées
Switch avec `fallthrough`Sortir de boucles imbriquéesContinuer une boucle spécifiqueL'instruction `goto`Récapitulatif - Contrôle de boucle avancé4Projet : Liste de tâches simple
Configuration du projetAjouter une tâche2Structures et Méthodes
Définir des méthodes sur des structuresReceveurs par valeurReceveurs par pointeurChoisir les receveursMéthodes vs FonctionsRécapitulatif - Comportement des structures5Les Maps en profondeur
Maps de StructsPointeurs comme valeurs de MapTester les Maps NilComparer des MapsRécapitulatif - Compteur de fréquence de mots3Interfaces (Les bases)
Qu'est-ce qu'une Interface ?Définir une InterfaceImplémenter une InterfaceUtiliser les types d'InterfaceInterface videAssertions de typeType SwitchRécapitulatif - Formes et comportements6Go idiomatique : Les ensembles
L'idiome des ensembles en GoCréer un ensembleAjouter à un ensembleVérifier l'appartenanceSupprimer d'un ensembleItérer sur un ensembleRécapitulatif - Noms d'utilisateur uniquesEntraînez-vous par vous-même : Compilateur Go en ligne