Menu
CoddyTech

Structs embebidos

Parte de la sección Fundamentos del Journey de GO de Coddy. Lección 99 de 109.

Go te permite incrustar 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 a los campos directamente
    fmt.Println(person.city)  // Accede al campo incrustado
}

El resultado muestra que podemos acceder directamente a los campos de la estructura incrustada:

Portland
challenge icon

Desafío

Principiante

En este desafío, practicarás el uso de structs incrustados (composición) en Go.

Tenemos dos structs: Address y Person. El struct Person debe incrustar el struct Address para que una persona pueda acceder directamente a los campos de dirección.

Tu tarea es completar la definición del struct Person para incrustar el struct Address. Las instrucciones de impresión en main ya leen los campos de dirección directamente de la persona (person.Street, person.City, person.ZipCode); se compilan una vez que Address está incrustado.

Pruébalo tú mismo

package main

import "fmt"

// La estructura Address contiene información de 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 la estructura Address aquí (solo una línea)
}

func main() {
	// Crea una nueva persona con información de 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 la 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)
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos

Practica por tu cuenta: Compilador de Go online