Menu
CoddyTech

Structs Incorporadas

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

Go permite incorporar uma struct dentro de outra, criando relações de composição. Essa é a abordagem do Go para herança.

Defina duas estruturas, com uma embutida na outra:

type Address struct {
    city  string
    state string
}

type Person struct {
    name string
    age  int
    Address  // struct incorporada (sem nome de campo)
}

func main() {
    person := Person{
        name: "Alice",
        age: 30,
        Address: Address{city: "Portland", state: "Oregon"},
    }
    
    // Acesse os campos diretamente
    fmt.Println(person.city)  // Acesse o campo incorporado
}

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

Portland
challenge icon

Desafio

Iniciante

Neste desafio, você vai praticar o uso de structs embutidas (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. As instruções de impressão em main já leem os campos de endereço diretamente da pessoa (person.Street, person.City, person.ZipCode); elas compilam assim que Address for incorporada.

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() {
	// Crie 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",
		},
	}

	// Exiba as informações da pessoa, incluindo o endereço
	fmt.Println("Name:", person.Name)
	fmt.Println("Age:", person.Age)
	
	// Exiba os campos do endereço diretamente da instância de Person
	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

Pratique por conta própria: Compilador de Go online