menu

Lección 3: Colecciones de Datos en Go – Arrays, Slices y Maps

Posted by blacksecured in Backend on .

En las lecciones anteriores trabajamos con valores únicos. Pero, ¿qué pasa cuando necesitamos guardar una lista de usuarios, un inventario de productos o un diccionario de traducciones? Para eso usamos las colecciones de datos.


1. Arrays: Listas de tamaño fijo

Un Array en Go es una secuencia numerada de elementos con un tamaño específico que no puede cambiar.

  • Se define indicando el tamaño entre corchetes [ ] seguido del tipo de dato.
  • Por defecto, se inicializan con «ceros» (0 para números, «» para strings).

Ejemplo de Array:

var a [5]int
fmt.Println("emp:", a) // Salida: [0 0 0 0 0]

a[4] = 100
fmt.Println("set:", a)
fmt.Println("get:", a[4])
fmt.Println("len:", len(a)) // Tamaño del array

2. Slices: Las listas dinámicas (El estándar en Go)

Los Slices son mucho más comunes que los arrays. A diferencia de estos, los Slices no tienen un tamaño fijo; pueden crecer y encogerse según lo necesites.
Cómo crear y manipular Slices:
  • Usamos la función make para crearlos.
  • Usamos append para añadir elementos (esto devuelve un nuevo slice).

Ejemplo de Slice:

s := make([]string, 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"

// Añadir elementos
s = append(s, "d")
s = append(s, "e", "f")

fmt.Println("slice:", s)
fmt.Println("largo:", len(s))

El operador de «Slicing»:

Puedes obtener una parte de un slice usando la sintaxis [bajo:alto]

l := s[2:5] // Elementos desde el índice 2 hasta el 4
fmt.Println("sl1:", l)

3. Maps: Diccionarios Clave-Valor

Un Map es una estructura de datos asociativa (conocida en otros lenguajes como Hash, Diccionario o Objeto). Relaciona una clave con un valor.

  • Se crean con make(map[tipo_clave]tipo_valor).
  • Son extremadamente rápidos para buscar información.

Ejemplo de Map:

m := make(map[string]int)

m["manzana"] = 5
m["banana"] = 10

fmt.Println("map:", m)

// Eliminar un elemento
delete(m, "manzana")

// Verificar si una clave existe
valor, existe := m["pera"]
fmt.Println("¿Existe pera?:", existe)

Resumen de diferencias:

Array   Fijo        Casi nunca (solo para tamaños conocidos y constantes).
Slice   Dinámico    El 90% de las veces para listas de datos.
Map     Dinámico    Para búsquedas rápidas mediante una clave o ID.

Reto de la Lección:

Crea un programa que tenga un Map de países y sus capitales. Luego, añade un nuevo país, elimina uno existente y finalmente imprime el mapa completo usando un ciclo for (Pista: investiga cómo usar for range en Maps).