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.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Desafío
FácilConstruye un sistema de registro de nombres de usuario que evite duplicados utilizando el modismo de conjuntos (set idiom) de Go. Este desafío demuestra cómo crear un sistema de gestión de usuarios robusto 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 nuevos intentos de registro de 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
- Agregar 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, verificar si el nombre de usuario ya existe en el conjunto utilizando el modismo "comma ok"
- Mostrar el proceso de registro para cada intento:
- Si el nombre de usuario está disponible:
"Registered: [username]"y agregarlo 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]"
- Finalmente, listar todos los nombres de usuario registrados en el sistema:
- Encabezado:
"All registered usernames:" - Cada nombre de usuario en una línea separada:
"@[username]"
- Encabezado:
Utiliza 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 prevenir duplicados en los sistemas de registro de usuarios, garantizando la integridad de los datos y proporcionando un rendimiento de búsqueda rápido para la validación de 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 únicos