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