Espero que este post sea bastante rápido jejejejej.
En este caso hablaremos de los Maps o lo que en otros lenguajes conoceríamos como diccionario. En general siguen las mismas teorías que los arrays o los slices en cuanto a creación y a lo referente al rendimiento, los mapas crecen dinámicamente pero podemos indicarles el tamaño lo que optimizaría un poco su rendimiento.
Creación
Empecemos con la creación. Como ya hemos visto en Go tenemos siempre varias formas de crear los elementos:
- Forma básica
//var nombreVariable map[tipoClave]tipoValor
var rangerRojo map[string]int
- Declaración corta:
//Inicializando sin valores
rangerRojo := map[string]int{}
//Inicializando con valores. Obligatoria la coma ultima
rangerVerde := map[string]int{
"Fuerza": 10000,
"Resistencia": 5000,
}
- Usando make
rangerVerde := make(map[string]int)
//Al igual que en los arrays podemos indicar el tamaño para optimizar rendimiento.
rangerNegro := make(map[string]int, 2)
Usando Map
Ya hemos visto un poco como es la creación de Maps en golang, no es muy complicado no?, veamos ahora algunos detalles de su uso.
Cuando asignamos el valor, realmente este devuelve 2, el contenido que queremos sacar y si existe o no. Veamoslo con un ejemplo:
rangerRojo := map[string]int{
"Fuerza": 10000,
}
rangerVerde := make(map[string]int)
power, exist := rangerRojo["Fuerza"]
fmt.Println("Valor: ", power, "Existe: ", exist)
power2, exist2 := rangerVerde["Fuerza"]
fmt.Println("Valor: ", power2, "Existe: ", exist2)
He usado dos formas de crear maps y el resultado de esto seria:
Como veis nos inicializa el valor como suele hacer Go y nos indica que no existe realmente.
Borrando contenido de un Map
En este caso Go se vuelve muy útil tiene una función propia para poder eliminar el elemento que queramos:
delete(rangerRojo,"Fuerza")
Probémoslo en un ejemplo más completo:
rangerRojo := map[string]int{
"Fuerza": 10000,
"Resistencia": 500,
}
fmt.Println(rangerRojo)
delete(rangerRojo, "Fuerza")
fmt.Println(rangerRojo)
Y como vemos elimina el contenido sin problemas:
Recorrer un MAP
Para recorrer un MAP usamos la misma teoría que para los arrays o slices: RANGE vamos directos al ejemplo ya que es bastante simple:
rangerRojo := map[string]interface{}{
"Fuerza": 10000,
"Resistencia": 500,
"Inteligencia": "200",
"Arma": "Espada",
}
for key, value := range rangerRojo {
fmt.Println("Clave: ", key, " Valor: ", value)
}
Tenemos un map que tiene como claves varios strings representando las características de nuestro ranger y como valor he introducido algo que no habiamos visto todavia INTERFACE{}, bueno como resumen haceros a la idea de que es un tipo especial que funciona como un genérico, es decir, que representa cualquier valor(por eso podemos tener valores tipo INT y tipo STRING) y al recorrerlo tenemos esto:
OJO a tener en cuenta, no tiene porque hacerlo en orden sobretodo si introducimos algo a posteriori, mirar un ejemplo:
rangerRojo := map[string]interface{}{
"Fuerza": 10000,
"Resistencia": 500,
"Inteligencia": 150,
"Arma": "Espada",
}
rangerRojo["Maná"] = 150
for key, value := range rangerRojo {
fmt.Println("Clave: ", key, " Valor: ", value)
}
He añadido otra propiedad a nuestro ranger y el resultado es:
Si lo ejecuto de nuevo:
Por último y como he adelantado en el ejemplo anterior:
Añadir elementos a nuestro MAP
Bueno como ya hemos visto esto es muy sencillo:
rangerRojo["Maná"] = 150
fmt.Println(rangerRojo)
Y nos muestra
Por el momento hemos terminado con los mapas, profundizaremos en el trabajo con ellos más adelante.
Sin mucho más nos vemos en la siguiente superNinjas :)






