13 Trabajando con Maps en Go

Published May 14, 2024

GoProgrammingMap

🧠 Introducción

Hasta ahora hemos trabajado con arrays y slices, que permiten acceder a los elementos por su posición. Pero ¿qué pasa cuando necesitas asociar datos con claves específicas, como el nombre de una fruta con su cantidad? Ahí es donde los maps brillan.

1. 🔑 ¿Qué es un Map?

Un map es una estructura de datos que almacena elementos como pares clave-valor. Se basa en tablas hash, lo que permite búsquedas, inserciones y eliminaciones muy eficientes.

A diferencia de arrays o slices, en los maps no accedes por índice, sino por una key (clave), que puede ser de casi cualquier tipo comparable.

2. 📦 Sintaxis y creación de Maps

Declaración:

var fruits map[string]int

En este caso, la clave es string y el valor es int.

Inicialización con make:

Antes de usar un map, debes inicializarlo:

fruits = make(map[string]int)

Agregar elementos:

fruits["grape"] = 5
fruits["orange"] = 9

Obtener un valor:

fmt.Println(fruits["grape"]) // 5

3. 🌱 Map literals

Puedes crear e inicializar un map en una sola línea usando map literals:

fruits := map[string]int{
    "grape":      14,
    "orange":     3,
    "strawberry": 8,
}

⚠️ ¡No olvides la coma al final del último elemento si usas multilínea! Go es exigente con eso.

4. ❓ Verificar si una clave existe

Cuando accedes a una key que no existe, Go devuelve el zero value del tipo de dato del valor.

fmt.Println(fruits["kiwi"]) // 0, si no existe

Esto puede ser peligroso si 0 es un valor válido en tu lógica. Para evitar confusiones, puedes usar la forma segura:

if v, ok := fruits["kiwi"]; ok {
    fmt.Println(v)
} else {
    fmt.Println("Key does not exist")
}
  • v: valor asociado.
  • ok: booleano que indica si la key existe.

Esta es una práctica muy común en Go y se considera idiomática.

5. ❌ Eliminar una clave

Para borrar un elemento del map, simplemente usa delete:

delete(fruits, "lime")

No devuelve nada. Si quieres estar seguro de que existe antes de borrarla, haz una verificación como la del punto anterior.

6. 🔢 Cantidad de elementos

Puedes usar len() para saber cuántos elementos tiene un map:

fmt.Println(len(fruits)) // Número de claves

✅ Conclusión

  • Los maps permiten trabajar con clave-valor de forma eficiente.
  • Son ideales cuando necesitas asociar identificadores únicos con datos.
  • Puedes verificar si una clave existe con v, ok := map[key].
  • Puedes borrar claves fácilmente con delete(map, key).

Los maps son herramientas muy poderosas y utilizadas en la mayoría de los programas Go reales.

🛠️ Práctica recomendada

  1. Crea un map students donde las claves sean nombres (string) y los valores sean notas (int).
  2. Agrega al menos 3 estudiantes y sus notas.
  3. Verifica si existe una nota para "Juan", si no existe imprime "No encontrado".
  4. Borra a uno de los estudiantes del map.
  5. Muestra la cantidad total de estudiantes después del borrado.

🚀 Siguientes pasos

Ya sabes trabajar con maps, así que es hora de aprender:

  • 🔄 Iterar sobre maps usando for-range.
  • 🧱 Structs con maps (ej: map de usuarios).
  • 🔐 Tipos avanzados de clave (structs como claves con precaución).