Structs en français

Introduction aux Structs

Dans le langage de programmation Go, un struct est un type défini par l'utilisateur, conçu pour rassembler plusieurs champs de différents types de données. Il permet de former une collection organisée de données qui sont souvent liées les unes aux autres. En utilisant des structs, vous pouvez encapsuler plusieurs champs, tels que des entiers, des chaînes, des booléens, ou même d'autres structs, ce qui simplifie l'accès et le stockage des données sans encombrer le code.

Syntaxe des Structs

Pour déclarer un struct en Go, vous utilisez les mots-clés type et struct. À l'intérieur des accolades, vous déclarez les champs de données nécessaires avec leurs types correspondants.

type  struct {
     
     
    ...
}

Exemple de Struct

Prenons un exemple simple de struct représentant un rectangle :

type Rectangle struct {
    largeur float64
    hauteur float64
}

Ici, Rectangle est le nom du struct, et largeur et hauteur sont les champs qu'il contient, tous deux de type float64, permettant de stocker des chiffres décimaux.

Attribution de Valeurs aux Champs

Il existe plusieurs manières de définir des valeurs pour un struct en Go. La méthode la plus directe consiste à utiliser la notation par points pour affecter chaque valeur individuellement.

type Voiture struct {
    marque string
    annee int
    kilometrage float64
}

func main() {
    maVoiture := Voiture{}
    maVoiture.marque = "Ford"
    maVoiture.annee = 2023
    maVoiture.kilometrage = 15000
}

Dans cet exemple, un struct Voiture est défini et ses valeurs sont assignées en utilisant la notation par points.

Utilisation de Valeurs Par Défaut

Une autre option consiste à utiliser des valeurs par défaut au lieu de définir chaque valeur manuellement. Pour ce faire, vous pouvez définir une fonction constructeur qui crée une nouvelle instance du struct et définit ses valeurs par défaut en cas d'absence de nouvelles valeurs.

func NouvelleVoiture(marque string, annee int, kilometrage float64) *Voiture {
    return &Voiture{marque, annee, kilometrage}
}

func main() {
    voiture1 := NouvelleVoiture("Toyota", 2023, 0)
    fmt.Printf("Marque: %s\n", voiture1.marque)       // Sortie: Marque: Toyota
    fmt.Printf("Année: %d\n", voiture1.annee)         // Sortie: Année: 2023
    fmt.Printf("Kilométrage: %f\n", voiture1.kilometrage) // Sortie: Kilométrage: 0
}

Initialisation des Structs

Il existe deux méthodes pour initialiser un struct en Go : utiliser le mot-clé var ou utiliser une valeur littérale.

Avec le mot-clé var :

type Voiture struct {
    marque string
    annee int
    kilometrage float64
}

func main() {
    voitureGrandMere := Voiture{}
    voitureGrandMere.marque = "Toyota"
    voitureGrandMere.annee = 1993
    voitureGrandMere.kilometrage = 251200.84
}

Avec une valeur littérale :

func main() {
    voiturePere := Voiture{marque: "Range Rover", annee: 2022, kilometrage: 10005.25}
}

Cette deuxième méthode est pratique pour définir tous les champs en une seule fois.

Ajout de Méthodes

Pour ajouter des méthodes à un struct, on déclare ces méthodes en dehors du struct. Elles nécessitent un récepteur, qui est le struct lui-même. Ce récepteur agit comme un paramètre, donnant accès aux champs du struct. Par exemple, une méthode Conduire() pour le struct Voiture:

func (v *Voiture) Conduire() {
    fmt.Println("Je conduis ma voiture")
}

func main() {
    maVoiture := NouvelleVoiture("Tesla", 2023, 0)
    maVoiture.Conduire()  // Appel de la méthode
}