Structs embebidos
Parte de la sección Fundamentos del Journey de GO de Coddy. Lección 99 de 109.
Go te permite incluir una estructura dentro de otra, creando relaciones de composición. Este es el enfoque de Go para la herencia.
Define dos estructuras, con una incrustada en la otra:
type Address struct {
city string
state string
}
type Person struct {
name string
age int
Address // struct incrustado (sin nombre de campo)
}
func main() {
person := Person{
name: "Alice",
age: 30,
Address: Address{city: "Portland", state: "Oregon"},
}
// Accede directamente a los campos
fmt.Println(person.city) // Accede al campo incrustado
}
El resultado muestra que podemos acceder directamente a los campos de la estructura incrustada:
PortlandDesafío
PrincipianteEn este desafío, practicarás el uso de estructuras anidadas (composición) en Go.
Tenemos dos estructuras: Address y Person. La estructura Person debe incluir la estructura Address para que una persona pueda acceder directamente a los campos de la dirección.
Tu tarea es completar la definición de la estructura Person para incluir la estructura Address. Las instrucciones de impresión en main ya leen los campos de la dirección directamente de la persona (person.Street, person.City, person.ZipCode); se compilan una vez que se incluye Address.
Pruébalo tú mismo
package main
import "fmt"
// La estructura Address contiene información sobre la ubicación
type Address struct {
Street string
City string
ZipCode string
}
// La estructura Person debe incorporar la estructura Address
type Person struct {
Name string
Age int
// TODO: Incorpora aquí la estructura Address (solo una línea)
}
func main() {
// Crea una nueva persona con información sobre su dirección
person := Person{
Name: "Alice",
Age: 30,
Address: Address{
Street: "123 Main St",
City: "Wonderland",
ZipCode: "12345",
},
}
// Imprime la información de la persona, incluida su dirección
fmt.Println("Name:", person.Name)
fmt.Println("Age:", person.Age)
// Imprime los campos de la dirección directamente desde la instancia de Person
fmt.Println("Street:", person.Street)
fmt.Println("City:", person.City)
fmt.Println("ZipCode:", person.ZipCode)
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
4Operadores de comparación y lógicos
Operadores de comparación - Parte 1Operadores de comparación - Parte 2Operador lógico ANDOperador lógico OROperador lógico NOTConceptos básicos de precedencia de operadoresResumen: Realizar comparaciones7Flujo de control: Bucles
Explicación del bucle `for`Bucle `for` - BásicoBucle `for` - Solo condiciónLa palabra clave `break`La palabra clave `continue`Bucles anidadosResumen - Repetición de acciones2Variables y tipos de datos básicos
¿Qué es una variable?Inferencia de tipos con `:=`Enteros (int)Números de punto flotanteBooleanosStringsValores ceroConstantesConvenciones de nomenclaturaResumen - Variables y tipos5Entrada y salida básica
Salida con formatoVerbos de formatoImpresión de tiposObtener entrada básica del usuarioResumen: Entrada y salida8Funciones
Comprendiendo las funcionesDeclaración de una funciónLlamada a funcionesParámetros de funciónRetorno de un solo valorRetorno de múltiples valoresValores de retorno con nombreConceptos básicos del alcance de las funcionesResumen: Creando código reutilizable3Operadores básicos
Operadores aritméticosOperador de divisiónEl operador móduloOperador de asignaciónOperadores de asignación compuestaIncremento y decrementoResumen - Cálculos6Flujo de control: Condicionales
La sentencia `if`La palabra clave `else`La palabra clave `else if`Sombreado de variables en `if`Inicialización de variablesLa sentencia `switch``switch` con expresiones`switch` sin expresiónLa palabra clave `fallthrough`Resumen: Toma de decisionesPractica por tu cuenta: Compilador de Go online