Go by Example: Maps

Maps son el tipo de datos asociativo incorporado en Go (a veces llamados hashes o dicts en otros lenguajes).

package main
import (
    "fmt"
    "maps"
)
func main() {

Para crear un mapa vacío, usa la función incorporada make: make(map[key-type]val-type).

    m := make(map[string]int)

Establece pares key/value usando la sintaxis típica name[key] = val.

    m["k1"] = 7
    m["k2"] = 13

Imprimir un map con, por ejemplo, fmt.Println mostrará todos sus pares key/value.

    fmt.Println("map:", m)

Obtén un valor para una clave con name[key].

    v1 := m["k1"]
    fmt.Println("v1:", v1)

Si la clave no existe, se devuelve el valor cero del tipo de valor.

    v3 := m["k3"]
    fmt.Println("v3:", v3)

La función incorporada len devuelve el número de pares key/value cuando se llama en un map.

    fmt.Println("len:", len(m))

La función incorporada delete elimina pares ckey/value de un map.

    delete(m, "k2")
    fmt.Println("map:", m)

Para eliminar todos los pares key/value de un map, usa la función incorporada clear.

    clear(m)
    fmt.Println("map:", m)

El segundo valor de retorno opcional al obtener un valor de un map indica si la clave estaba presente en el map. Esto se puede utilizar para distinguir entre claves que faltan y claves con valores cero como 0 o "". Aquí no necesitábamos el valor en sí, por lo que lo ignoramos con el identificador en blanco _.

    _, prs := m["k2"]
    fmt.Println("prs:", prs)

También puedes declarar e inicializar un nuevo map en la misma línea con esta sintaxis.

    n := map[string]int{"foo": 1, "bar": 2}
    fmt.Println("map:", n)

El paquete maps contiene un número de funciones utilitarias útiles para los maps.

    n2 := map[string]int{"foo": 1, "bar": 2}
    if maps.Equal(n, n2) {
        fmt.Println("n == n2")
    }
}

Ten en cuenta que los maps se muestran en la forma map[k:v k:v] cuando se imprimen con fmt.Println.

$ go run maps.go 
map: map[k1:7 k2:13]
v1: 7
v3: 0
len: 2
map: map[k1:7]
map: map[]
prs: false
map: map[bar:2 foo:1]
n == n2

Siguiente ejemplo: Range.