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
- Internals de los mapas
- Comprobación de existencia
- Mapas como conjuntos
- Iteración y orden