¿En qué consisten las estructuras anidadas?
En algunas ocasiones, requerimos utilizar estructuras dentro de estructuras. Esto suele ser muy útil como una forma de organizar estructuras de datos de forma mas eficiente. Continuando con el ejemplo anterior, supongamos que la capital no es solo un string, sino una estructura tipo ciudad con sus propios campos.
Ejemplo de estructuras anidadas en Go
type Ciudad struct {
Nombre string
Poblacion int
}
type Pais struct {
Nombre string
Capital Ciudad
Idioma string
Poblacion int
}
Descripción del ejemplo de las estructuras anidadas
Como podemos ver, ahora tenemos dos estructuras, para anidar una estructura dentro de otra, primero creamos las dependencias y enseguida las que las anidan.
ciudadDeMexico := Ciudad{
Nombre: "Ciudad de Mexico",
Poblacion: 20e6,
}
mexico := Pais{
Nombre: "México",
Capital: ciudadDeMexico,
Idioma: "Español",
Poblacion: 120e6,
}
Sintaxis de estructuras anidadas en un solo bloque
También es posible realizar la definición en un solo bloque, esto nos ahorra el uso de la variable de la ciudad pero tan sencillo de leer como el ejemplo anterior.
mexico := Pais{
Nombre: "México",
Capital: Ciudad{
Nombre: "Ciudad de Mexico",
Poblacion: 20e6,
},
Idioma: "Español",
Poblacion: 120e6,
}
El ejemplo completo se vería así.
package main
import "fmt"
type Ciudad struct {
Nombre string
Poblacion int
}
type Pais struct {
Nombre string
Capital Ciudad
Idioma string
Poblacion int
}
func main() {
ciudadDeMexico := Ciudad{
Nombre: "Ciudad de Mexico",
Poblacion: 20e6,
}
mexico := Pais{
Nombre: "México",
Capital: ciudadDeMexico,
Idioma: "Español",
Poblacion: 120e6,
}
fmt.Printf("%+v\n", mexico)
}
Y la salida así.
{Nombre:México Capital:{Nombre:Ciudad de Mexico Poblacion:20000000} Idioma:Español Poblacion:120000000}