Hostinger

Les struct en Go !

Quelle est l’utilité des struct ?

En Go, une struct est une structure de données qui permet de regrouper plusieurs valeurs sous un même type. Elle est l’équivalent des objets dans d’autres langages, bien que Go ne soit pas orienté objet.

Les struct sont essentielles pour organiser des données complexes et leur attacher des méthodes, rendant ainsi le code plus lisible et structuré.

Les méthodes ne seront pas abordées dans ce cours ; nous les verrons plus tard.

Déclaration de struct

Une struct est définie à l’aide du mot-clé type, suivi du nom de la structure et d’un bloc contenant les champs.

On utilise le même mot clé `type` que que pour la redéfinition de type.

// Définition d'une structure "Person"
type Person struct {
    Name string
    Age  int
}

Initialisation d’une struct

Il existe plusieurs manières d’initialiser une struct en Go.

1ère méthode : assignation des valeurs après déclaration

p1 := Person{}
p1.Name = "Alice"
p1.Age = 30

2ème méthode : utiliser l'ordre des champs

p2 := Person{"Bob", 25}
fmt.Println(p2) // {Bob 25}

3ème méthode : utiliser les noms des champs

p3 := Person{Name: "Charlie", Age: 40}
fmt.Println(p3) // {Charlie 40}

✅ Avantage : Cette méthode est plus lisible et évite les erreurs d’ordre des champs !

4ème méthode : avec des valeurs par défaut (champ omis)

p4 := Person{Name: "David"}
fmt.Println(p4) // {David 0} (Age prend la valeur zéro)

✅ Remarque : Si un champ n’est pas spécifié, il prend sa valeur zéro (0 pour les nombres, "" pour les string, false pour les booléens) !

Des struct imbriquées

Une struct peut contenir une autre struct, ce qui permet de modéliser des données plus complexes.

package main

import "fmt"

type Address struct {
    City  string
    Zip   string
}

type Person struct {
    Name    string
    Age     int
    Address Address
}

func main() {
    p := Person{
        Name: "Alice",
        Age:  30,
        Address: Address{
            City: "Paris",
            Zip:  "75001",
        },
    }

    fmt.Println(p.Address.City) // Paris
}

Des structs anonymes

Go permet aussi de créer des structs sans les nommer, utiles pour des usages temporaires.

package main

import "fmt"

func main() {
    user := struct {
        Name string
        Age  int
    }{"Alice", 30}

    fmt.Println(user.Name) // Alice
}