Menu
Coddy logo textTech

Struct incorporati

Fa parte della sezione Fondamenti del percorso GO di Coddy. Lezione 99 di 109.

Go ti permette di incorporare una struct in un'altra, creando relazioni di composizione. Questo è l'approccio di Go all'ereditarietà.

Definisci due struct, una incorporata nell’altra:

type Address struct {
    city  string
    state string
}

type Person struct {
    name string
    age  int
    Address  // struct incrustada (sin nombre de campo)
}

func main() {
    person := Person{
        name: "Alice",
        age: 30,
        Address: Address{city: "Portland", state: "Oregon"},
    }
    
    // Accede a los campos directamente
    fmt.Println(person.city)  // Accede al campo incrustado
}

L'output mostra che possiamo accedere direttamente ai campi della struct incorporata:

Portland
challenge icon

Sfida

Principiante

In questa sfida, farai pratica con l’uso delle struct incorporate (composizione) in Go.

Abbiamo due struct: Address e Person. La struct Person dovrebbe incorporare la struct Address, così che una persona possa accedere direttamente ai campi dell’indirizzo.

Il tuo compito è completare la definizione della struct Person per incorporare la struct Address, quindi accedere direttamente ai campi dell’indirizzo dall’istanza della persona.

Provalo tu

package main

import "fmt"

// La struct Address contiene informazioni sulla posizione
type Address struct {
	Street  string
	City    string
	ZipCode string
}

// La struct Person dovrebbe incorporare la struct Address
type Person struct {
	Name string
	Age  int
	// TODO: Incorpora qui la struct Address (in una sola riga)
}

func main() {
	// Crea una nuova persona con le informazioni sull'indirizzo
	person := Person{
		Name: "Alice",
		Age:  30,
		Address: Address{
			Street:  "123 Main St",
			City:    "Wonderland",
			ZipCode: "12345",
		},
	}

	// Stampa le informazioni sulla persona, incluso l'indirizzo
	fmt.Println("Name:", person.Name)
	fmt.Println("Age:", person.Age)
	
	// TODO: Stampa i campi dell'indirizzo direttamente dall'istanza di Person
	// (senza usare person.Address.Street, ecc.)
	fmt.Println("Street:", person.Street)
	fmt.Println("City:", person.City)
	fmt.Println("ZipCode:", person.ZipCode)
}
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 Fondamenti

Esercitati da solo: Compilatore Go online