Lección 11 · 11 de 20
Mapas · Go
Guarde pares clave-valor en un mapa de Go: añadir, leer con ok, delete y len, y escribirlo siempre en el mismo orden con sort.Strings.

Un mapa relaciona claves con valores. map[string]int tiene claves de texto y valores enteros, y el literal los empareja con dos puntos: "apples": 12. Para leer se pone la clave entre corchetes: stock["apples"] da 12.
Asignar a una clave cambia su valor si ya existe (pears pasa a 8) y la crea si no existe (kiwis). Leer una clave que no está no falla: da el valor cero del tipo, 0. Para saber si de verdad existe, se pide un segundo valor: _, ok := stock["bananas"] deja ok en false.
delete(stock, "plums") borra una clave con su valor, y len(stock) cuenta las que quedan: 3.
El orden de un mapa en Go es aleatorio a propósito: cada ejecución puede recorrerlo de otra manera. Para escribirlo siempre igual, se reúnen las claves en un slice con for key := range stock (la lección 18 explica range), se ordenan con sort.Strings(keys) y se recorren en ese orden, leyendo cada valor con stock[keys[i]].
Código · main.go
package mainimport ( "fmt" "sort")func main() { // A map links keys to values: map[keyType]valueType. stock := map[string]int{"apples": 12, "pears": 5, "plums": 0} fmt.Println("Apples:", stock["apples"]) // Assigning changes a value or adds a new key. stock["pears"] = 8 stock["kiwis"] = 20 // A missing key gives the zero value; ok says if it exists. fmt.Println("Bananas:", stock["bananas"]) if _, ok := stock["bananas"]; !ok { fmt.Println("We do not sell bananas") } delete(stock, "plums") fmt.Println("Kinds of fruit:", len(stock)) // The order of a map is random: sort the keys first. keys := make([]string, 0, len(stock)) for key := range stock { keys = append(keys, key) } sort.Strings(keys) for i := 0; i < len(keys); i++ { fmt.Printf("%-8s%4d\n", keys[i], stock[keys[i]]) }}Salida · go run main.go
Apples: 12 Bananas: 0 We do not sell bananas Kinds of fruit: 3 apples 12 kiwis 20 pears 8
Para recordar
map[clave]valorrelaciona claves con valores.m[k] = vcambia o añade;delete(m, k)borra.- Una clave que no existe da el valor cero.
v, ok := m[k]dice si la clave existe.- El orden de un mapa es aleatorio: ordene las claves con
sort.Strings.
Ejercicio
Añada un mapa prices con el precio de cada fruta y escriba, en orden alfabético, cada fruta con el valor de sus existencias (float64(stock[k]) * prices[k]) y el total al final.