0Pricing
Go Academy · Lección

Internals de los mapas

Descubra cómo almacenan datos los mapas

Internals de los mapas es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.

Qué es un mapa

Un mapa almacena pares clave-valor. Cada clave se asocia con un valor, y las búsquedas son muy rápidas en promedio.

En Go se escribe map[KeyType]ValueType.

package main

import "fmt"

func main() {
	ages := map[string]int{"Ann": 30, "Bob": 25}
	fmt.Println(ages["Ann"])
}

Tablas hash internas

Los mapas de Go se implementan como tablas hash. Una función hash convierte cada clave en un número que señala el bucket donde se encuentra el valor.

Buckets

El mapa almacena las entradas en buckets. Cada bucket contiene varios pares clave-valor. El hash de una clave decide a qué bucket va, lo que proporciona búsquedas promedio rápidas de O(1).

Creación con make

Puede crear un mapa vacío con make. Opcionalmente, proporcione una indicación de tamaño para reservar espacio de antemano.

package main

import "fmt"

func main() {
	scores := make(map[string]int)
	scores["x"] = 10
	fmt.Println(scores)
}

Mapas nil

Un mapa declarado sin inicialización es nil. Puede leer de un mapa nil (obtendrá valores cero), pero escribir en él provoca un pánico. Inicialícelo siempre antes de escribir.

package main

import "fmt"

func main() {
	var m map[string]int
	fmt.Println(m == nil)
	fmt.Println(m["missing"])
}

Adición y actualización

Asignar un valor a una clave la añade si es nueva o sobrescribe el valor existente.

package main

import "fmt"

func main() {
	m := map[string]int{"a": 1}
	m["b"] = 2
	m["a"] = 99
	fmt.Println(m)
}

Eliminación de claves

La función integrada delete elimina una clave. Eliminar una clave inexistente no tiene ningún efecto y es seguro.

package main

import "fmt"

func main() {
	m := map[string]int{"a": 1, "b": 2}
	delete(m, "a")
	fmt.Println(m)
}

Longitud de un mapa

len devuelve el número de pares clave-valor que hay actualmente en el mapa.

package main

import "fmt"

func main() {
	m := map[string]int{"a": 1, "b": 2, "c": 3}
	fmt.Println(len(m))
}

Los mapas crecen automáticamente

A medida que añade entradas, Go amplía la tabla subyacente y puede volver a aplicar el hash a las claves para colocarlas en nuevos buckets. Esto ocurre automáticamente, por lo que no necesita gestionar la capacidad manualmente.

Tipos de clave permitidos

Las claves deben ser comparables: tipos que puede usar con ==. Funcionan las cadenas, los números, los booleanos y las estructuras cuyos campos sean comparables. Los slices y los mapas no pueden ser claves.

package main

import "fmt"

func main() {
	type Point struct{ X, Y int }
	m := map[Point]string{{1, 2}: "origin-ish"}
	fmt.Println(m[Point{1, 2}])
}

Semántica de referencia

Un valor de tipo mapa es una referencia a los datos subyacentes. Pasar un mapa a una función permite que esa función modifique el mismo mapa, sin necesidad de usar un puntero.

package main

import "fmt"

func addOne(m map[string]int) {
	m["count"]++
}

func main() {
	m := map[string]int{"count": 0}
	addOne(m)
	fmt.Println(m)
}

Comprobación rápida

¿Qué ocurre si intenta escribir una clave en un mapa nil?

Resumen

Aspectos internos de los mapas:

  • Los mapas son tablas hash con buckets
  • Búsqueda, inserción y eliminación promedio de O(1)
  • Las claves deben ser comparables; escribir en mapas nil provoca un pánico
  • Los mapas tienen semántica de referencia

Preguntas frecuentes

¿La lección «Internals de los mapas» es gratis?

Sí — el texto completo de «Internals de los mapas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Internals de los mapas»?

Descubra cómo almacenan datos los mapas Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Go Academy?

No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Internals de los mapas»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Go Academy?

Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Internals de los mapas
  2. Comprobación de existencia
  3. Mapas como conjuntos
  4. Iteración y orden
← Volver a Go Academy