Menu
Coddy logo textTech

Structs embebidos

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

Go permite incrustar un struct dentro de otro, 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  // embedded struct (no field name)
}

func main() {
    person := Person{
        name: "Alice",
        age: 30,
        Address: Address{city: "Portland", state: "Oregon"},
    }
    
    // Access fields directly
    fmt.Println(person.city)  // Access embedded field
}

La salida 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 embebidos (composición) en Go.

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

Tu tarea es completar la definición del struct Person para embeber el struct Address, y luego acceder a los campos de la dirección directamente desde la instancia de la persona.

Hoja de referencia

Go utiliza la incrustación de estructuras (struct embedding) para la composición. Incrusta una estructura dentro de otra incluyendo el tipo de estructura sin un nombre de campo:

type Address struct {
    city  string
    state string
}

type Person struct {
    name string
    age  int
    Address  // estructura incrustada (sin nombre de campo)
}

Accede directamente a los campos de la estructura incrustada:

person := Person{
    name: "Alice",
    age: 30,
    Address: Address{city: "Portland", state: "Oregon"},
}

fmt.Println(person.city)  // Accede al campo incrustado directamente

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 integrar la estructura Address
type Person struct {
	Name string
	Age  int
	// TODO: Integrar la estructura Address aquí (solo una línea)
}

func main() {
	// Crear 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",
		},
	}

	// Imprimir la información de la persona incluyendo la dirección
	fmt.Println("Name:", person.Name)
	fmt.Println("Age:", person.Age)
	
	// TODO: Imprimir los campos de la dirección directamente desde la instancia de la persona
	// (sin usar person.Address.Street, etc.)
	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