Menu
Coddy logo textTech

Structures imbriquées

Fait partie de la section Fondamentaux du Journey GO de Coddy — leçon 99 sur 109.

Go vous permet d'imbriquer une struct dans une autre, créant ainsi des relations de composition. C'est l'approche de Go en matière d'héritage.

Définissez deux structures, dont l'une est imbriquée dans l'autre :

type Address struct {
    city  string
    state string
}

type Person struct {
    name string
    age  int
    Address  // structure imbriquée (pas de nom de champ)
}

func main() {
    person := Person{
        name: "Alice",
        age: 30,
        Address: Address{city: "Portland", state: "Oregon"},
    }
    
    // Accéder directement aux champs
    fmt.Println(person.city)  // Accéder au champ imbriqué
}

La sortie montre que nous pouvons accéder directement aux champs de la structure imbriquée :

Portland
challenge icon

Défi

Débutant

Dans ce défi, vous allez vous entraîner à utiliser des structures imbriquées (composition) en Go.

Nous avons deux structures : Address et Person. La structure Person doit imbriquer la structure Address afin qu'une personne puisse accéder directement aux champs d'adresse.

Votre tâche consiste à compléter la définition de la structure Person pour imbriquer la structure Address, puis à accéder aux champs d'adresse directement depuis l'instance de la personne.

Aide-mémoire

Go utilise l'imbrication de structures (struct embedding) pour la composition. Imbriquez une structure dans une autre en incluant le type de la structure sans nom de champ :

type Address struct {
    city  string
    state string
}

type Person struct {
    name string
    age  int
    Address  // structure imbriquée (pas de nom de champ)
}

Accédez directement aux champs de la structure imbriquée :

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

fmt.Println(person.city)  // Accès direct au champ imbriqué

Essayez vous-même

package main

import "fmt"

// La structure Address contient des informations de localisation
type Address struct {
	Street  string
	City    string
	ZipCode string
}

// La structure Person doit intégrer la structure Address
type Person struct {
	Name string
	Age  int
	// TODO: Intégrer la structure Address ici (une seule ligne)
}

func main() {
	// Créer une nouvelle personne avec des informations d'adresse
	person := Person{
		Name: "Alice",
		Age:  30,
		Address: Address{
			Street:  "123 Main St",
			City:    "Wonderland",
			ZipCode: "12345",
		},
	}

	// Afficher les informations de la personne, y compris l'adresse
	fmt.Println("Name:", person.Name)
	fmt.Println("Age:", person.Age)
	
	// TODO: Afficher les champs de l'adresse directement depuis l'instance person
	// (sans utiliser person.Address.Street, etc.)
	fmt.Println("Street:", person.Street)
	fmt.Println("City:", person.City)
	fmt.Println("ZipCode:", person.ZipCode)
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Fondamentaux