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.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Desafio
FácilCrie um sistema de registro de nomes de usuário que evite nomes duplicados usando o idioma de conjunto (set) do Go. Este desafio demonstra como criar um sistema robusto de gerenciamento de usuários que garante a unicidade do nome de usuário em todos os registros.
Você receberá duas entradas:
- Uma string contendo nomes de usuário existentes separados por vírgulas (ex:
"alice123,bob_dev,charlie2024,diana_codes") - Uma string contendo novas tentativas de registro de nomes de usuário separadas por vírgulas (ex:
"eve_user,alice123,frank_dev,bob_dev,grace2024,alice123")
Sua tarefa é:
- Criar um conjunto usando o idioma do Go
map[string]struct{}para armazenar 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 conjunto usando o literal de struct vazia
{}como valor - Analisar a segunda string de entrada dividindo-a por vírgulas para obter as novas tentativas de registro
- Para cada tentativa de registro, verificar se o nome de usuário já existe no conjunto usando o idioma 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 conjunto - Se o nome de usuário já existir:
"Username taken: [username]"
- Se o nome de usuário estiver disponível:
- Após 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 idioma de conjunto do Go fornece uma solução eficiente para evitar duplicatas em sistemas de registro de usuários, garantindo a integridade dos dados e fornecendo desempenho de busca rápido para 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 Únicos