Go Academy · Lección

Maps: almacenes clave-valor

Creación, lectura, escritura y eliminación de entradas de un map

Lección 3 de 413 pasos

Maps: almacenes clave-valor es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 3 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 en Go es una colección no ordenada de pares clave-valor. Las claves deben ser de un tipo comparable (cadenas, enteros, etc.). Los mapas son tipos de referencia respaldados por una tabla hash.

Crear mapas

Utilice un literal o make:

package main
import "fmt"

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

Leer y escribir

Acceda a los valores con m[key] y asígnelos con m[key] = value. Leer una clave inexistente devuelve el valor cero:

package main
import "fmt"

func main() {
    m := map[string]int{}
    m["hits"] = 10
    m["hits"]++
    fmt.Println(m["hits"])    // 11
    fmt.Println(m["missing"]) // 0
}

Comprobar la existencia de una clave

La forma de dos valores permite distinguir una clave inexistente de un valor cero:

package main
import "fmt"

func main() {
    m := map[string]int{"a": 0}
    v, ok := m["a"]
    fmt.Println(v, ok) // 0 true
    v2, ok2 := m["z"]
    fmt.Println(v2, ok2) // 0 false
}

Eliminar entradas

Utilice la función integrada delete. Eliminar una clave inexistente no tiene ningún efecto:

package main
import "fmt"

func main() {
    m := map[string]int{"x": 1, "y": 2}
    delete(m, "x")
    delete(m, "z") // no-op
    fmt.Println(m) // map[y:2]
}

Iterar sobre un mapa

Utilice range para iterar. El orden no está garantizado:

package main
import "fmt"

func main() {
    scores := map[string]int{"Alice": 90, "Bob": 85}
    for name, score := range scores {
        fmt.Printf("%s: %d\n", name, score)
    }
}

Mapas con valores struct

Los mapas pueden contener structs como valores. Actualícelos mediante una variable temporal (los structs de los mapas no son direccionables):

package main
import "fmt"

type Point struct{ X, Y int }

func main() {
    points := map[string]Point{"A": {1, 2}}
    p := points["A"]
    p.X = 99
    points["A"] = p
    fmt.Println(points["A"]) // {99 2}
}

Mapas nil

Un mapa nil se comporta como un mapa vacío al leerlo (devuelve valores cero), pero escribir en un mapa nil provoca un panic:

package main

func main() {
    var m map[string]int
    _ = m["key"]   // ok — returns 0
    // m["key"] = 1 // PANIC: assignment to nil map
}

Los mapas no son seguros para uso concurrente

El mapa integrado de Go no es seguro para las goroutines. Las lecturas simultáneas son correctas, pero las escrituras simultáneas (o una lectura y una escritura) requieren un mutex o sync.Map:

package main
import "sync"

func main() {
    var mu sync.Mutex
    m := map[string]int{}
    mu.Lock()
    m["key"] = 1
    mu.Unlock()
    _ = m
}

Contar frecuencias

Un patrón clásico de los mapas: contar ocurrencias:

package main
import "fmt"

func main() {
    words := []string{"go", "is", "fast", "go", "is", "go"}
    freq := map[string]int{}
    for _, w := range words {
        freq[w]++
    }
    fmt.Println(freq) // map[fast:1 go:3 is:2]
}

Comprobación rápida

¿Qué ocurre al leer una clave que no existe en un mapa de Go?

Resumen: mapas

Conclusiones principales:

  • Los mapas son almacenes de pares clave-valor sin orden
  • Utilice la forma de dos valores para comprobar si existe una clave
  • No escriba nunca en un mapa nil
  • El orden de iteración es aleatorio; ordene las claves si es necesario
  • Proteja los mapas con un mutex en el código concurrente

Propuesta de práctica

Escriba una función que reciba una cadena y devuelva un map[rune]int que cuente cuántas veces aparece cada carácter. Pruébela con la cadena "hello".

Gratis para empezar

Aprende Go con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
51
Lecciones
203

Preguntas frecuentes

¿La lección «Maps: almacenes clave-valor» es gratis?

Sí — el texto completo de «Maps: almacenes clave-valor» 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 «Maps: almacenes clave-valor»?

Creación, lectura, escritura y eliminación de entradas de un map 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 3 de 4.

¿Cuánto tiempo toma la lección «Maps: almacenes clave-valor»?

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. Arrays: colecciones de longitud fija
  2. Slices: listas dinámicas
  3. Maps: almacenes clave-valor
  4. Iteración de colecciones con range
← Volver a Go Academy