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.

  1. Crie o arquivo pokedex_map.go na pasta src/:
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

  1. Abra le terminal integrado.
  2. 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.")
    }
}

Capitulo Anterior | Proximo Capitulo