DEV Community 👩‍💻👨‍💻

Nahuel Segovia
Nahuel Segovia

Posted on

Simular un array asociativo(map) con tipos dinámicos en Golang

Seguramente si venís de lenguajes de programación con tipado dinámico como Javascript o Python, te preguntaste como es posible guardar en un map distintos tipos de datos incluso sin saber que tipo de dato estás guardando. La respuesta es que si nos llevamos solamente por las reglas que Golang nos impone para programar, esto no se podría ni debería hacer. Pero por obvias razones en algún momento vas a necesitar hacerlo, y para lograrlo hay que utilizar interfaces vacías.

¿Por qué utilizar interfaces vacías? Porque estas pueden almacenar cualquier tipo de dato, tan simple como eso.

Vamos a ver un ejemplo sencillo:


claveValor := make(map[string]interface{})
claveValor["uno"] = 4
claveValor["dos"] = false
claveValor["tres"] = "Esto es una cadena"
claveValor["cuatro"] = 20.54

fmt.Println(claveValor)

=> map[cuatro:20.54 dos:false tres:Esto es una cadena uno:4]
Enter fullscreen mode Exit fullscreen mode

Por lo que ya sabes, sino sabes que tipo de datos vas a almacenar en un map, o simplemente te es indiferente, cuando lo declares especificale que e tipo de valor es una interface y te olvidas del problema.

Incluso si queremos ponernos más sucios, podemos declarar que tanto clave como valor serán interfaces, entonces da igual todo:

claveValor := make(map[interface{}]interface{})

claveValor[5] = 4
claveValor[true] = false
claveValor["tres"] = "Esto es una cadena"
claveValor["cuatro"] = 20.54

fmt.Println(claveValor)
=> map[true:false 5:4 cuatro:20.54 tres:Esto es una cadena]
Enter fullscreen mode Exit fullscreen mode

Porsupuesto que esto es solo para mostrar lo que se puede logar, no creo que sea muy recomendable hacer esto último.

Top comments (0)

🌚 Browsing with dark mode makes you a better developer.

It's a scientific fact.