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
}