Menu
CoddyTech

Structs Aninhadas

Parte da seção Programação Orientada a Objetos do Journey de GO da Coddy. Lição 16 de 107.

Uma struct aninhada é uma struct que contém outra struct nomeada como um de seus campos. Isso permite modelar dados complexos e hierárquicos combinando tipos menores e reutilizáveis.

type Address struct {
    Street string
    City   string
    ZIP    string
}

type Person struct {
    Name    string
    Age     int
    Address Address  // struct aninhada
}

Para acessar campos em uma struct aninhada, encadeie os nomes dos campos com pontos.

p := Person{
    Name: "Alice",
    Age:  30,
    Address: Address{
        Street: "123 Main St",
        City:   "Boston",
        ZIP:    "02101",
    },
}

fmt.Println(p.Address.City) // Boston

O aninhamento promove a reutilização de código. O tipo Address pode ser usado em várias structs, como Person, Company ou Order, sem duplicar campos. Essa abordagem espelha relações do mundo real, nas quais entidades contêm outras entidades.

type Company struct {
    Name      string
    Employees int
    Address   Address  // mesmo tipo Address reutilizado
}

Você pode aninhar structs em vários níveis, embora manter as hierarquias pouco profundas melhore a legibilidade. Structs aninhadas são fundamentais para criar modelos de dados orientados a objetos em Go.

challenge icon

Desafio

Fácil

Vamos criar um sistema de gerenciamento de funcionários que demonstra como structs aninhadas ajudam a modelar hierarquias do mundo real. Você criará uma estrutura em que funcionários pertencem a departamentos, e os departamentos têm informações de localização.

Você organizará seu código em dois arquivos:

  • models.go: Defina três structs que funcionam em conjunto:
    • Location com os campos Building (string) e Floor (int)
    • Department com Name (string) e um campo Location aninhado
    • Employee com ID (int), Name (string) e um campo Department aninhado
  • main.go: Leia as informações do funcionário da entrada, crie um Employee com structs devidamente aninhadas e exiba o perfil completo do funcionário acessando os campos pela estrutura aninhada.

As seguintes entradas serão fornecidas:

  • Linha 1: ID do funcionário (inteiro)
  • Linha 2: Nome do funcionário
  • Linha 3: Nome do departamento
  • Linha 4: Nome do edifício
  • Linha 5: Número do andar (inteiro)

Formato da saída:

Employee: [Name] (ID: [ID])
Department: [DepartmentName]
Location: [Building], Floor [Floor]

Por exemplo, dados 101, Alice, Engineering, Tower e 5, sua saída deve ser:

Employee: Alice (ID: 101)
Department: Engineering
Location: Tower, Floor 5

Acesse os campos aninhados usando a notação de ponto para percorrer a hierarquia de structs (por exemplo, employee.Department.Location.Building).

Experimente você mesmo

package main

import "fmt"

func main() {
	// Leia as informações do funcionário
	var id int
	var name string
	var deptName string
	var building string
	var floor int

	fmt.Scanln(&id)
	fmt.Scanln(&name)
	fmt.Scanln(&deptName)
	fmt.Scanln(&building)
	fmt.Scanln(&floor)

	// TODO: Crie um Employee com structs aninhadas corretamente
	// Use as structs Location, Department e Employee de models.go
	// Inicialize todos os campos aninhados com os valores de entrada

	// TODO: Imprima o perfil do funcionário usando o formato:
	// Employee: [Name] (ID: [ID])
	// Department: [DepartmentName]
	// Location: [Building], Floor [Floor]
	// Acesse os campos aninhados usando a notação de ponto (por exemplo, employee.Department.Location.Building)
}
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 Programação Orientada a Objetos

Pratique por conta própria: Compilador de Go online