Menu
Coddy logo textTech

Structs Incorporadas

Parte da seção Fundamentos do Journey de GO da Coddy — lição 99 de 109.

Go permite que você incorpore uma struct dentro de outra, criando relações de composição. Esta é a abordagem do Go para herança.

Defina duas structs, com uma embutida na outra:

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
}

A saída mostra que podemos acessar os campos da struct incorporada diretamente:

Portland
challenge icon

Desafio

Iniciante

Neste desafio, você praticará o uso de structs incorporadas (composição) em Go.

Temos duas structs: Address e Person. A struct Person deve incorporar a struct Address para que uma pessoa possa acessar diretamente os campos de endereço.

Sua tarefa é completar a definição da struct Person para incorporar a struct Address e, em seguida, acessar os campos de endereço diretamente da instância da pessoa.

Experimente você mesmo

package main

import "fmt"

// A struct Address contém informações de localização
type Address struct {
	Street  string
	City    string
	ZipCode string
}

// A struct Person deve incorporar a struct Address
type Person struct {
	Name string
	Age  int
	// TODO: Incorpore a struct Address aqui (apenas uma linha)
}

func main() {
	// Cria uma nova pessoa com informações de endereço
	person := Person{
		Name: "Alice",
		Age:  30,
		Address: Address{
			Street:  "123 Main St",
			City:    "Wonderland",
			ZipCode: "12345",
		},
	}

	// Imprime as informações da pessoa, incluindo o endereço
	fmt.Println("Name:", person.Name)
	fmt.Println("Age:", person.Age)
	
	// TODO: Imprima os campos de endereço diretamente da instância person
	// (sem usar person.Address.Street, etc.)
	fmt.Println("Street:", person.Street)
	fmt.Println("City:", person.City)
	fmt.Println("ZipCode:", person.ZipCode)
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos