O Idioma de Conjuntos em Go
Parte da seção Lógica & Fluxo do Journey de GO da Coddy — lição 31 de 68.
Go não possui uma estrutura de dados de conjunto (set) integrada como muitas outras linguagens de programação. No entanto, os desenvolvedores Go criaram uma solução elegante usando mapas para simular conjuntos, e esse padrão tornou-se tão comum que é considerado Go idiomático.
O idioma de conjunto (set) em Go usa um mapa onde você se importa apenas com as chaves, não com os valores. Como você precisa armazenar algo como o valor, os programadores Go usam uma struct vazia struct{}. Aqui está o padrão básico:
var mySet map[string]struct{}A struct vazia struct{} é especial porque ocupa zero bytes de memória. Isso a torna perfeita para conjuntos (sets) onde você só precisa rastrear se algo existe ou não, sem desperdiçar memória com valores sem significado.
Esta abordagem aproveita a propriedade fundamental das chaves de um mapa: elas devem ser únicas. Quando você adiciona um item ao seu conjunto, você está, na verdade, adicionando uma chave ao mapa. A unicidade é imposta automaticamente pelo comportamento do mapa, fornecendo a você a verdadeira semântica de conjunto.
Nas próximas lições, você aprenderá como criar, manipular e trabalhar com conjuntos usando este padrão idiomático do Go. Esta técnica é amplamente utilizada em bases de código Go para rastrear itens exclusivos, implementar algoritmos e resolver problemas onde você precisa de testes de associação rápidos.
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.
Folha de consulta
Go não possui uma estrutura de dados de conjunto (set) integrada, mas utiliza mapas para simular conjuntos com o padrão idiomático:
var mySet map[string]struct{}A struct vazia struct{} é usada como o tipo de valor porque ocupa zero bytes de memória. As chaves do mapa devem ser únicas, o que fornece automaticamente a semântica de conjunto para rastrear itens únicos.
Experimente você mesmo
Esta lição não inclui um desafio de código.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
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