Da trilha de Go Este conceito ainda não saiu como card do dia. ir para o card de hoje

Go Coleções Básico

Maps

Em Go, um map é uma estrutura de dados que associa chaves a valores, como um dicionário. Você cria um map com make(map[K]V) ou com um literal map[K]V{...}. A chave pode ser qualquer tipo comparável (strings, números, structs sem slices/maps/funcs).

Para acessar um valor, use m[chave]. Se a chave não existir, o valor zero do tipo é retornado. Para saber se a chave existe, use a forma comma-ok: valor, ok := m[chave]. O ok é true se a chave estiver presente.

Para remover uma entrada, use delete(m, chave). A ordem de iteração sobre um map é aleatória e não deve ser confiada; se precisar de ordem, ordene as chaves separadamente.

Maps são referências: ao passar para funções, as alterações são visíveis fora. Maps não são seguros para uso concorrente sem sincronização.

Pontos-chave

  • Crie maps com make(map[string]int) ou literais map[string]int{"a": 1}.
  • Use valor, ok := m[chave] para verificar se a chave existe.
  • delete(m, chave) remove uma entrada; não faz nada se a chave não existir.
  • A ordem de iteração em um map é aleatória e muda a cada execução.
  • Maps são tipos de referência: modificações dentro de funções afetam o map original.
maps.go
package main

import "fmt"

func main() {
    // Criação com make
    idades := make(map[string]int)
    idades["Alice"] = 30
    idades["Bob"] = 25

    // Criação com literal
    notas := map[string]float64{
        "Alice": 9.5,
        "Bob":   8.0,
    }

    // Acesso e comma-ok
    if idade, ok := idades["Alice"]; ok {
        fmt.Println("Alice tem", idade, "anos")
    } else {
        fmt.Println("Alice não encontrada")
    }

    // Chave inexistente retorna valor zero e ok=false
    if _, ok := idades["Carlos"]; !ok {
        fmt.Println("Carlos não está no map")
    }

    // delete
    delete(idades, "Bob")
    fmt.Println("Após delete, idades:", idades)

    // Iteração (ordem aleatória)
    fmt.Println("Notas:")
    for nome, nota := range notas {
        fmt.Printf("  %s: %.1f\n", nome, nota)
    }
}

Exercícios

  1. 1
    Fácil

    Contando palavras

    Escreva um programa que conte quantas vezes cada palavra aparece em uma frase e imprima o resultado. Use um map[string]int.

    Resolver
  2. 2
    Médio

    Verificando presença com comma-ok

    Dado um map de produtos e preços, verifique se um produto específico existe. Se existir, imprima seu preço; caso contrário, imprima uma mensagem de erro. Use a forma comma-ok.

    Resolver
  3. 3
    Desafio

    Removendo e listando chaves ordenadas

    Implemente um programa que gerencie um inventário de frutas. O programa deve remover uma fruta específica usando delete e depois imprimir todas as frutas restantes em ordem alfabética. Use um map para armazenar as quantidades e uma slice para ordenar as chaves.

    Resolver

Continue estudando