Recapitulação - Nomes de Usuário Únicos
Parte da seção Lógica & Fluxo do Journey de GO da Coddy. Lição 37 de 68.
Desafio
FácilCrie um sistema de registro de nomes de usuário que impeça nomes de usuário duplicados usando o idiomático set do Go. Este desafio demonstra como criar um sistema robusto de gerenciamento de usuários que garante a exclusividade dos nomes de usuário em todos os registros.
Você receberá duas entradas:
- Uma string contendo nomes de usuário existentes separados por vírgulas (por exemplo,
"alice123,bob_dev,charlie2024,diana_codes") - Uma string contendo tentativas de registro de novos nomes de usuário separadas por vírgulas (por exemplo,
"eve_user,alice123,frank_dev,bob_dev,grace2024,alice123")
Sua tarefa é:
- Criar um set usando o idiomático
map[string]struct{}do Go para armazenar os nomes de usuário registrados - Analisar a primeira string de entrada dividindo-a por vírgulas para obter os nomes de usuário existentes
- Adicionar cada nome de usuário existente ao seu set usando o literal de struct vazio
{}como valor - Analisar a segunda string de entrada dividindo-a por vírgulas para obter as tentativas de novos registros
- Para cada tentativa de registro, verificar se o nome de usuário já existe no set usando o idiomático comma ok
- Exibir o processo de registro para cada tentativa:
- Se o nome de usuário estiver disponível:
"Registered: [username]"e adicioná-lo ao set - Se o nome de usuário já existir:
"Username taken: [username]"
- Se o nome de usuário estiver disponível:
- Depois de processar todas as tentativas de registro, exibir um resumo abrangente:
"Registration Summary:""Initial usernames: [initial_count]""Registration attempts: [attempts_count]""Successful registrations: [successful_count]""Rejected (duplicate): [rejected_count]""Total registered usernames: [total_count]"
- Por fim, listar todos os nomes de usuário registrados no sistema:
- Cabeçalho:
"All registered usernames:" - Cada nome de usuário em uma linha separada:
"@[username]"
- Cabeçalho:
Use o pacote strings para dividir as strings de entrada por vírgulas. Este desafio demonstra como o idiomático set do Go oferece uma solução eficiente para impedir duplicatas em sistemas de registro de usuários, garantindo a integridade dos dados e proporcionando um desempenho rápido de busca para a validação de nomes de usuário.
Experimente você mesmo
package main
import (
"fmt"
"sort"
"strings"
)
func main() {
// Ler a entrada
var existingUsernames string
var newRegistrations string
fmt.Scanln(&existingUsernames)
fmt.Scanln(&newRegistrations)
// Analisar as strings de entrada
existing := strings.Split(existingUsernames, ",")
attempts := strings.Split(newRegistrations, ",")
// Criar um conjunto usando o idioma do Go
userSet := make(map[string]struct{})
// TODO: Escreva seu código abaixo
// 1. Adicionar nomes de usuário existentes ao conjunto
// 2. Processar cada tentativa de registro
// 3. Exibir os resultados do registro para cada tentativa
// 4. Calcular e exibir o resumo
// 5. Listar todos os nomes de usuário registrados (lembre-se de ordenar para uma saída consistente)
}Todas as lições de Lógica & Fluxo
1Fluxo de Controle Avançado
Switch com `fallthrough`Interrompendo Loops AninhadosContinuando um Loop EspecíficoA Instrução `goto`Recapitulação - Controle de Loop Avançado4Projeto: Lista de Tarefas Simples
Configuração do ProjetoAdicionando uma Tarefa2Structs e Métodos
Definindo Métodos em StructsRecebedores de ValorRecebedores de PonteiroEscolhendo RecebedoresMétodos vs FunçõesRecapitulação - Comportamento de Structs5Mapas em Profundidade
Mapas de StructsPonteiros como Valores de MapVerificando Mapas NilComparando MapasRecapitulação - Contador de Frequência de Palavras3Interfaces (O Básico)
O que é uma Interface?Definindo uma InterfaceImplementando uma InterfaceUsando Tipos de InterfaceInterface VaziaAsserções de TipoType SwitchRecapitulação - Formas e Comportamentos6Go Idiomático: Conjuntos
O Idioma de Conjuntos em GoCriando um ConjuntoAdicionando a um ConjuntoVerificando a Existência de ElementosRemovendo de um ConjuntoIterando sobre um ConjuntoRecapitulação - Nomes de Usuário ÚnicosPratique por conta própria: Compilador de Go online