Golang mapas

Maps

Mapa é uma estrutura de dados que implementa hash table

Criação de Mapas

Para criarmos um mapa em go devemos utilizar make, ela aloca a memória para armazenar os dados do mapa.

meuMapa := make(map[tipoDaChava]tipoDoValor)

A forma acima irá criar um mapa vazio.

Opcionalmente podemos criar um mapa com uma capacidade inicial definida, isso pode beneficiar o desempenho da aplicação já que a necessidade de realocação de memória pode ser diminuída.

meuMapa := make(map[string]string, 10)

Inserindo novos elementos ao mapa

Abaixo exemplo de como associar uma valor à uma chave.

meuMapa["chave"] = "valor"

Recuperando valor de uma chave

Abaixo exemplo de como recuperar o valor de uma chave.

meuValor := meuMapa["chave"]
fmt.Println(meuValor)
>> valor

Poderá ocorrer situações em que a chave não exista no mapa, o go nos fornece uma maneira de verificar a existência da chava dentro do mapa.

meuMapa := make(map[string]string)
meuMapa["animal"] = "gato"

valor, existe := meuMapa["golang"]
fmt.Println(existe)
>> false

Caso você recupere um valor de uma chave que não existe, esse valor será o valor zero para o tipo do mapa.

Iteração em mapas

Podemos percorrer todos os elementos de um mapa através do range.

meuMapa := make(map[string]string)
meuMapa["pais"] = "Brasil"
meuMapa["cidade"] = "Sao Paulo"
meuMapa["parque"] = "ibirapuera"

for chave, valor := range meuMapa {
    fmt.Printf("Minha chave: %s, meu valor: %s\n", chave, valor)
}
>> Minha chave: pais, meu valor: Brasil
>> Minha chave: cidade, meu valor: Sao Paulo
>> Minha chave: parque, meu valor: ibirapuera

Remoção de Elemento

Podemos remover um elemento de um mapa através da função delete

meuMapa := make(map[string]string)
meuMapa["pais"] = "Brasil"
meuMapa["cidade"] = "Sao Paulo"
meuMapa["parque"] = "ibirapuera"

for chave, valor := range meuMapa {
    fmt.Printf("Minha chave: %s, meu valor: %s\n", chave, valor)
}

delete(meuMapa, "parque")

fmt.Println("Após deleção")

for chave, valor := range meuMapa {
    fmt.Printf("Minha chave: %s, meu valor: %s\n", chave, valor)
}
Minha chave: pais, meu valor: Brasil
Minha chave: cidade, meu valor: Sao Paulo
Minha chave: parque, meu valor: ibirapuera
Após deleção                              
Minha chave: pais, meu valor: Brasil      
Minha chave: cidade, meu valor: Sao Paulo

Comprimento do Mapa

Podemos verificar o comprimento de um map através da função len.

meuMapa := make(map[string]string)
meuMapa["pais"] = "Brasil"
meuMapa["cidade"] = "Sao Paulo"
meuMapa["parque"] = "ibirapuera"

fmt.Println(len(meuMapa))
>> 3

Mapas Aninhados

Abaixo exemplo de como trabalhar com mapas aninhados:

meuMapa := make(map[string]map[int]string)
meuMapa["cidade"] = make(map[int]string)
meuMapa["cidade"][0] = "Sao Paulo"
meuMapa["cidade"][1] = "Rio de Janeiro"

for chave, valor := range meuMapa {
    for chaveInterna, valorInterno := range valor {
        fmt.Printf("Chave: %s, chaveInterna: %d, valorInterno: %s\n", chave, chaveInterna, valorInterno)
    }
}
>> Chave: cidade, chaveInterna: 1, valorInterno: Rio de Janeiro
>> Chave: cidade, chaveInterna: 0, valorInterno: Sao Paulo