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.

Folha de consulta

Go usa incorporação de structs para composição. Incorpore uma struct dentro de outra incluindo o tipo da struct sem um nome de campo:

type Address struct {
    city  string
    state string
}

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

Acesse os campos da struct incorporada diretamente:

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

fmt.Println(person.city)  // Acesse o campo incorporado diretamente

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