Resumen: Nombres de usuario únicos
Parte de la sección Lógica y Flujo del Journey de GO de Coddy. Lección 37 de 68.
Desafío
FácilConstruye un sistema de registro de nombres de usuario que evite los nombres de usuario duplicados mediante el modismo de conjuntos de Go. Este desafío demuestra cómo crear un sistema sólido de gestión de usuarios que garantice la unicidad de los nombres de usuario en todos los registros.
Recibirás dos entradas:
- Una cadena que contiene nombres de usuario existentes separados por comas (por ejemplo,
"alice123,bob_dev,charlie2024,diana_codes") - Una cadena que contiene intentos de registro de nuevos nombres de usuario separados por comas (por ejemplo,
"eve_user,alice123,frank_dev,bob_dev,grace2024,alice123")
Tu tarea es:
- Crear un conjunto utilizando el modismo de Go
map[string]struct{}para almacenar los nombres de usuario registrados - Analizar la primera cadena de entrada dividiéndola por comas para obtener los nombres de usuario existentes
- Añadir cada nombre de usuario existente a tu conjunto utilizando el literal de estructura vacía
{}como valor - Analizar la segunda cadena de entrada dividiéndola por comas para obtener los nuevos intentos de registro
- Para cada intento de registro, comprobar si el nombre de usuario ya existe en el conjunto utilizando el modismo de coma ok
- Mostrar el proceso de registro para cada intento:
- Si el nombre de usuario está disponible:
"Registered: [username]"y añadirlo al conjunto - Si el nombre de usuario ya existe:
"Username taken: [username]"
- Si el nombre de usuario está disponible:
- Después de procesar todos los intentos de registro, mostrar un resumen completo:
"Registration Summary:""Initial usernames: [initial_count]""Registration attempts: [attempts_count]""Successful registrations: [successful_count]""Rejected (duplicate): [rejected_count]""Total registered usernames: [total_count]"
- Por último, enumerar todos los nombres de usuario registrados en el sistema:
- Encabezado:
"All registered usernames:" - Cada nombre de usuario en una línea separada:
"@[username]"
- Encabezado:
Usa el paquete strings para dividir las cadenas de entrada por comas. Este desafío demuestra cómo el modismo de conjuntos de Go proporciona una solución eficiente para evitar duplicados en los sistemas de registro de usuarios, garantizando la integridad de los datos y ofreciendo un rendimiento rápido en las búsquedas para validar nombres de usuario.
Pruébalo tú mismo
package main
import (
"fmt"
"sort"
"strings"
)
func main() {
// Leer entrada
var existingUsernames string
var newRegistrations string
fmt.Scanln(&existingUsernames)
fmt.Scanln(&newRegistrations)
// Analizar cadenas de entrada
existing := strings.Split(existingUsernames, ",")
attempts := strings.Split(newRegistrations, ",")
// Crear conjunto usando el modismo de Go
userSet := make(map[string]struct{})
// TODO: Escribe tu código a continuación
// 1. Agregar nombres de usuario existentes al conjunto
// 2. Procesar cada intento de registro
// 3. Mostrar los resultados de registro para cada intento
// 4. Calcular y mostrar el resumen
// 5. Listar todos los nombres de usuario registrados (recuerda ordenar para una salida consistente)
}Todas las lecciones de Lógica y Flujo
1Flujo de control avanzado
Switch con `fallthrough`Salir de bucles anidadosContinuar un bucle específicoLa sentencia `goto`Repaso: Control de bucles avanzado4Proyecto: Lista de tareas sencilla
Configuración del proyectoAñadir una tarea2Estructuras y Métodos
Definición de métodos en estructurasReceptores de valorReceptores de punteroElegir receptoresMétodos vs FuncionesResumen - Comportamiento de estructuras5Mapas en profundidad
Mapas de StructsPunteros como valores de MapVerificación de Maps NilComparación de MapsResumen - Contador de frecuencia de palabras3Interfaces (Conceptos básicos)
¿Qué es una interfaz?Definir una interfazImplementar una interfazUso de tipos de interfazInterfaz vacíaAserciones de tipoType SwitchResumen: Formas y comportamientos6Go idiomático: Sets
El modismo de Set en GoCrear un SetAñadir a un SetComprobar pertenenciaEliminar de un SetIterar sobre un SetResumen: Nombres de usuario únicosPractica por tu cuenta: Compilador de Go online