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 literaismap[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.
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)
}
}