Map é um tipo de dado complexo, dinâmico, composto de itens ou elementos heterogêneos na forma chave-valor. Conhecido também como hash ou dicionário em outras linguagens.

Algumas características
  1. Elemento Chave-valor
  2. Não ordenado
  3. Não permite chaves duplicadas
  4. Heterogêneo
Tipos de dados: Chave
  1. Booleans
  2. Numbers
  3. Strings
  4. Arrays
  5. Pointers
  6. Structs
Tipos de dados: Valor
  1. Qualquer tipo

Em Go podemos declarar um map utilizando as sintaxes abaixo:

Sintaxe
var variavel =  map([tipo_chave]tipo_valor
var variavel = map([tipo_chave]tipo_valor { chave1:valor1, …} //iniciado
variavel := map([tipo_chave][]tipo_valor { chave1:{valor1, …}} //iniciado
make(map([tipo_chave]tipo_valor) //vazio
Onde
tipo_chave: tipo de dado da chave
tipo_valor: tipo de dado do valor
Exemplo 1
package main
import "fmt"

func main() {
	var mmap = make(map[int]string) //vazio
	fmt.Println(mmap)
}
Saída
map[]

O acesso a um elemento de um map é feito utilizando o indexador [] que recebe o nome de uma chave como argumento.

Sintaxe
nome_map[nome_chave]
Onde
nome_chave: chave para acessar valor
Exemplo 2
package main
import (
	"fmt"
)

func main() {

	var mmap = map[int]string{0: "string0", 1: "string1", 2: "string2"}
	fmt.Println(mmap[0], mmap[1], mmap[2])
}
Saída
string0 string1 string2

Caso a chave não exista, um valor do tipo default do tipo de dado utilizado como valor será retornado.

A atualização de um item ou elemento de um map, é feita utilizando o indexador [] que recebe o nome de uma chave como argumento onde vamos atualizar o valor.

Sintaxe
nome_map[nome_chave] = valor
Exemplo 3
package main
import (
	"fmt"
)

func main() {

	var mmap = make(map[int]string) //vazio

	mmap[0] = "string0"
	mmap[1] = "string1"
	mmap[2] = "string2"

	fmt.Println(mmap[0], mmap[1], mmap[2])

	mmap[0] = "Go! Go! Go!"

	fmt.Println(mmap[0], mmap[1], mmap[2])
}
Saída
string0 string1 string2
Go! Go! Go! string1 string2

Quando a chave informada no indexador não existe, a mesma será adicionada ao map sendo associado ao valor informado para atribuição.

Exemplo 4
package main

import (
	"fmt"
)

func main() {

	var mmap = make(map[int]string) //vazio

	//mmap[0] = "string0"
	mmap[1] = "string1"
	mmap[2] = "string2"

	fmt.Println(mmap[0], mmap[1], mmap[2])

	mmap[0] = "Go! Go! Go!"

	fmt.Println(mmap[0], mmap[1], mmap[2])
}
Saída
string1 string2
Go! Go! Go! string1 string2

Para ter conhecimento do número de elementos contidos em um map, podemos utilizar a função nativa len:

Sintaxe
func len(v Type) int
Onde
v: map para verificar tamanho
Exemplo 5
package main

import (
	"fmt"
)

func main() {

	var mmap = make(map[int]string) //vazio

	mmap[0] = "string0"
	mmap[1] = "string1"
	mmap[2] = "string2"

	fmt.Println(len(mmap))
}
Saída
3

Para percorrer elemento a elemento de um map, podemos utilizar o comando de repetição for com auxílio da função range.

Sintaxe
variavel_string1 + variavel_string2
Exemplo 6
package main
import (
	"fmt"
)

func main() {

	var mmap = make(map[int]string) //vazio

	mmap[0] = "string0"
	mmap[1] = "string1"
	mmap[2] = "string2"

	for ch, val := range mmap {
		fmt.Printf("%d: :%v \n", ch, val)
	}
}
Saída
0: :string0 
1: :string1 
2: :string2

Para verificar se um elemento existe, passamos sua chave como argumento para o indexador []. Nesse caso, o acesso retorna dois valores: o valor associado a chave e valor booleano indicando se a chave existe ou não.

Sintaxe
valor, booleano := map[chave]
Exemplo 7
package main
import (
	"fmt"
)

func main() {

	var mmap = make(map[int]string) //vazio

	mmap[0] = "string0"
	mmap[1] = "string1"
	mmap[2] = "string2"

	valor, ok := mmap[3] //string vazia, false
	fmt.Println(valor, ok)
	valor, ok = mmap[2] //valor, true
	fmt.Println(valor, ok)
}
Saída
false
string2 true

Quando precisamos excluir apenas um elemento de um map, fazemos uso da função nativa delete. Caso seja necessário excluir todos os elementos, utilizamos a função também nativa clear.

Sintaxe
clear(map)
delete(map, chave)
Exemplo 8
package main
import (
	"fmt"
)

func main() {

	var mmap = make(map[int]string) //vazio

	mmap[0] = "string0"
	mmap[1] = "string1"
	mmap[2] = "string2"

	fmt.Println(len(mmap))
	delete(mmap, 2)
	fmt.Println(len(mmap))
	clear(mmap)
	fmt.Println(len(mmap))
}
Saída
3
2
0

O tipo map fornece métodos para manipular seus elementos. Esse package é importado utilizando a sintaxe abaixo:

Sintaxe
import "maps"

Abaixo uma tabela com os métodos disponíveis. Clique no link Visitar para ver mais sobre cada função.

Método Descrição Link
All Retorna um iterador Visitar
Clone retorna uma cópia Visitar
Copy Copia elementos de origem em um destino Visitar
DeleteFunc Exclui elemento baseado em função Visitar
Equal Verifica se dois maps possuem os mesmos elementos Visitar
EqualFunc Verifica se dois maps possuem os mesmos elementos baseados em uma função Visitar
Insert Adiciona um elemento em um map Visitar
Keys Retorna iterador para chaves Visitar
Values Retorna um iterador para os valores Visitar
  1. 15/05/2025 - versão inicial