Como funciona o tipo de dado Map em Go?
sobes.tech IA
Resposta da IA
Map — é uma coleção não ordenada de pares "chave-valor" em Go.
Características:
- As chaves devem ser tipos de dados comparáveis (números, strings, booleanos, ponteiros, canais, interfaces, se o tipo dinâmico for comparável, e arrays se seus elementos forem comparáveis). Slices, funções e outros maps não podem ser usados como chaves.
- Os valores podem ser de qualquer tipo de dado.
- Map é um tipo de referência, o que significa que uma variável do tipo map contém um ponteiro para a estrutura de dados map na memória. Alterar o map através de uma variável será visível através de outras variáveis que referenciam o mesmo map.
- O valor nulo para um map é
nil. Não é possível escrever em um mapnil; tentar fazê-lo provocará um pânico. - O tamanho do map muda dinamicamente à medida que elementos são adicionados ou removidos.
Implementação interna: Map em Go é implementado como uma tabela de hash (hash table). Cada chave é hasheada, e o resultado do hash é usado para determinar a posição do valor associado na tabela.
// Criar um map
m := make(map[string]int)
// Adicionar elementos
m["um"] = 1
m["dois"] = 2
// Obter um valor
value, ok := m["um"] // value = 1, ok = true
value, ok = m["três"] // value = 0 (valor zero para int), ok = false
// Remover um elemento
delete(m, "dois")
// Iterar sobre o map (a ordem não é garantida)
for key, value := range m {
// ...
}
Comparação de maps: Dois maps são considerados iguais apenas se eles fazem referência à mesma estrutura interna, ou seja, map1 == map2 apenas se map1 e map2 forem a mesma variável. Não é possível comparar o conteúdo de um map usando ==. Para comparar o conteúdo, é necessário iterar sobre ambos os maps e comparar seus elementos.
Desempenho: As operações de acesso, adição e remoção em um map têm, em média, complexidade O(1). No pior caso (por exemplo, com muitas colisões de hash), podem levar O(n) em tempo.