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
}