Funcionamento interno de maps
Entenda como os maps armazenam dados
Funcionamento interno de maps é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.
O que é um mapa
Um mapa armazena pares de chave e valor. Cada chave corresponde a um valor, e as consultas são muito rápidas em média.
Em Go, você escreve map[KeyType]ValueType.
package main
import "fmt"
func main() {
ages := map[string]int{"Ann": 30, "Bob": 25}
fmt.Println(ages["Ann"])
}Tabelas de dispersão por baixo
Os mapas de Go são implementados como tabelas de dispersão. Uma função de dispersão transforma cada chave em um número que aponta para um compartimento onde o valor fica armazenado.
Compartimentos
O mapa armazena as entradas em compartimentos. Cada compartimento contém vários pares de chave e valor. O hash de uma chave determina para qual compartimento ela vai, proporcionando consultas médias rápidas em O(1).
Criação com make
Você pode criar um mapa vazio com make. Opcionalmente, forneça uma estimativa de tamanho para pré-alocar espaço.
package main
import "fmt"
func main() {
scores := make(map[string]int)
scores["x"] = 10
fmt.Println(scores)
}Mapas nil
Um mapa declarado sem inicialização é nil. Você pode ler de um mapa nil e obter valores zero, mas escrever nele causa pânico. Sempre inicialize o mapa antes de escrever nele.
package main
import "fmt"
func main() {
var m map[string]int
fmt.Println(m == nil)
fmt.Println(m["missing"])
}Adicionando e atualizando
Atribuir um valor a uma chave adiciona essa chave se ela for nova ou substitui o valor existente.
package main
import "fmt"
func main() {
m := map[string]int{"a": 1}
m["b"] = 2
m["a"] = 99
fmt.Println(m)
}Excluindo chaves
A função integrada delete remove uma chave. Excluir uma chave inexistente é uma operação segura sem efeito.
package main
import "fmt"
func main() {
m := map[string]int{"a": 1, "b": 2}
delete(m, "a")
fmt.Println(m)
}Tamanho de um mapa
len retorna o número de pares de chave e valor presentes no mapa.
package main
import "fmt"
func main() {
m := map[string]int{"a": 1, "b": 2, "c": 3}
fmt.Println(len(m))
}Os mapas crescem automaticamente
À medida que você adiciona entradas, Go aumenta a tabela subjacente e pode recalcular o hash das chaves em novos compartimentos. Isso acontece automaticamente, portanto você não precisa gerenciar a capacidade manualmente.
Tipos de chave permitidos
As chaves devem ser comparáveis: tipos que podem ser usados com ==. Strings, números, valores booleanos e estruturas com campos comparáveis funcionam. Fatias e mapas não podem ser chaves.
package main
import "fmt"
func main() {
type Point struct{ X, Y int }
m := map[Point]string{{1, 2}: "origin-ish"}
fmt.Println(m[Point{1, 2}])
}Semântica de referência
Um valor de mapa é uma referência aos dados subjacentes. Passar um mapa para uma função permite que essa função modifique o mesmo mapa, sem precisar de um ponteiro.
package main
import "fmt"
func addOne(m map[string]int) {
m["count"]++
}
func main() {
m := map[string]int{"count": 0}
addOne(m)
fmt.Println(m)
}Verificação rápida
O que acontece se você tentar escrever uma chave em um mapa nil?
Recapitulação
Detalhes internos dos mapas:
- Mapas são tabelas de dispersão com compartimentos
- Consulta, inserção e exclusão médias em O(1)
- As chaves devem ser comparáveis; mapas nil causam pânico ao serem usados para escrita
- Mapas têm semântica de referência
Perguntas Frequentes
A aula “Funcionamento interno de maps” é grátis?
Sim — o texto completo de “Funcionamento interno de maps” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.
O que vou aprender em “Funcionamento interno de maps”?
Entenda como os maps armazenam dados Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Go Academy?
Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Funcionamento interno de maps”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Go Academy?
Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Funcionamento interno de maps
- Verificação de existência
- Maps como conjuntos
- Iteração e ordenação