Menu
Coddy logo textTech

Struct annidate

Fa parte della sezione Programmazione orientata agli oggetti del percorso GO di Coddy. Lezione 16 di 107.

Una struct annidata è una struct che contiene un'altra struct con nome come uno dei suoi campi. Questo ti permette di modellare dati complessi e gerarchici componendo insieme tipi più piccoli e riutilizzabili.

type Address struct {
    Street string
    City   string
    ZIP    string
}

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

Per accedere ai campi di una struct annidata, concatenare i nomi dei campi con dei punti.

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

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

L'annidamento favorisce il riutilizzo del codice. Il tipo Address può essere utilizzato in più struct come Person, Company o Order senza duplicare i campi. Questo approccio rispecchia le relazioni del mondo reale, in cui le entità contengono altre entità.

type Company struct {
    Name      string
    Employees int
    Address   Address  // stesso tipo Address riutilizzato
}

Puoi annidare le struct su più livelli, anche se mantenere le gerarchie poco profonde migliora la leggibilità. Le struct annidate sono fondamentali per creare modelli di dati orientati agli oggetti in Go.

challenge icon

Sfida

Facile

Costruiamo un sistema di gestione dei dipendenti che mostri come le struct annidate aiutano a modellare gerarchie del mondo reale. Creerai una struttura in cui i dipendenti appartengono ai reparti e i reparti dispongono di informazioni sulla sede.

Organizzerai il codice in due file:

  • models.go: definisci tre struct che collaborano tra loro:
    • Location con i campi Building (string) e Floor (int)
    • Department con Name (string) e un campo Location annidato
    • Employee con ID (int), Name (string) e un campo Department annidato
  • main.go: leggi le informazioni del dipendente dall'input, crea un Employee con struct annidate correttamente e mostra il profilo completo del dipendente accedendo ai campi tramite la struttura annidata.

Verranno forniti i seguenti input:

  • Riga 1: ID del dipendente (intero)
  • Riga 2: nome del dipendente
  • Riga 3: nome del reparto
  • Riga 4: nome dell'edificio
  • Riga 5: numero del piano (intero)

Formato dell'output:

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

Ad esempio, dati 101, Alice Chen, Engineering, Tower A e 5, l'output dovrebbe essere:

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

Accedi ai campi annidati usando la notazione con il punto per attraversare la gerarchia delle struct (ad esempio, employee.Department.Location.Building).

Provalo tu

package main

import "fmt"

func main() {
	// Leggi le informazioni del dipendente
	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: Crea un Employee con struct annidate correttamente
	// Usa le struct Location, Department ed Employee di models.go
	// Inizializza tutti i campi annidati con i valori di input

	// TODO: Stampa il profilo del dipendente usando il formato:
	// Employee: [Name] (ID: [ID])
	// Department: [DepartmentName]
	// Location: [Building], Floor [Floor]
	// Accedi ai campi annidati usando la notazione con il punto (ad es., employee.Department.Location.Building)
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Go online