Capítulo 12: Coleções (Maps) 📕Ϟ
Neste capítulo, vamos aprender a usar uma das estruturas de dados mais úteis do Go: o Map (Mapa), com o tema Pokédex!
📖 O que é um Map?
Diferente dos slices onde acessamos os itens por um número (índice), no Map nós guardamos pares de Chave e Valor. Você pode usar um texto (como o nome de um Pokémon) como chave para encontrar um valor (como o tipo dele)! No Go, precisamos inicializar o map usando a função make ou um literal.
📖 Exemplo Guiado: Criando uma Pokédex
Vamos criar um mapa para associar o nome do Pokémon ao seu tipo elemental.
- Crie o arquivo
pokedex_map.gona pastasrc/:
package main
import "fmt"
func main() {
// Criando um Map (Chave string, Valor string)
pokedex := make(map[string]string)
// Adicionando itens
pokedex["Pikachu"] = "Eletrico"
pokedex["Charmander"] = "Fogo"
pokedex["Squirtle"] = "Agua"
// Buscando um valor pela chave
busca := "Pikachu"
// O Go retorna o valor e um booleano dizendo se ele existe!
tipo, existe := pokedex[busca]
if existe {
fmt.Println(busca, "e do tipo:", tipo)
} else {
fmt.Println(busca, "nao encontrado na Pokedex.")
}
fmt.Println("\n--- Todos os Pokemons ---")
for nome, tipo := range pokedex {
fmt.Println(nome, "->", tipo)
}
}🕹️ Como Executar e Testar no VS Code
- Abra le terminal integrado.
- Execute:
go run pokedex_map.go
Resultado Esperado:
Pikachu e do tipo: Eletrico
--- Todos os Pokemons ---
Pikachu -> Eletrico
Charmander -> Fogo
Squirtle -> Agua📊 Ilustração Visual: Chave e Valor
O Map conecta uma chave única diretamente ao seu valor:
graph LR A["'Pikachu'"] --> B["'Elétrico'"] C["'Charmander'"] --> D["'Fogo'"] E["'Squirtle'"] --> F["'Água'"]
🛠️ Prática Obrigatória 1: Loja de Itens de RPG
Crie um programa chamado loja_rpg.go que use um Map para armazenar o nome de um item (string) e o seu preço em ouro (int). Adicione pelo menos 3 itens (ex: “Espada”, “Escudo”, “Pocao”) e peça para o programa exibir o preço da “Espada”.
🔑 Gabarito de Código
Prática 1: loja_rpg.go
package main
import "fmt"
func main() {
loja := make(map[string]int)
loja["Espada"] = 150
loja["Escudo"] = 100
loja["Pocao"] = 50
itemBusca := "Espada"
preco, existe := loja[itemBusca]
if existe {
fmt.Println("O item", itemBusca, "custa", preco, "moedas de ouro.")
} else {
fmt.Println("Item nao encontrado na loja.")
}
}