Structs anonymes et composition
Intégration et réutilisation du code fondée sur les structs
Structs anonymes et composition est une leçon Go Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Go Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Go Academy comprend 4 leçons au total.
Structures anonymes
Une structure anonyme n'a pas de type nommé. Elle est définie directement à l'endroit où elle est utilisée et convient aux données de courte durée, aux tests pilotés par tableau et aux regroupements ponctuels :
package main
import "fmt"
func main() {
point := struct{ X, Y int }{X: 3, Y: 7}
fmt.Println(point.X, point.Y)
}Structures anonymes dans les tests pilotés par tableau
Un idiome Go courant consiste à utiliser une tranche de structures anonymes pour les tests pilotés par tableau :
package main
import "fmt"
func double(n int) int { return n * 2 }
func main() {
tests := []struct{ input, want int }{
{1, 2}, {5, 10}, {0, 0},
}
for _, tt := range tests {
got := double(tt.input)
if got != tt.want {
fmt.Printf("FAIL: double(%d) = %d, want %d\n", tt.input, got, tt.want)
}
}
fmt.Println("all tests passed")
}Intégration de structures
L'intégration d'un type dans une structure expose ses champs et ses méthodes dans la structure englobante :
package main
import "fmt"
type Animal struct{ Name string }
func (a Animal) Speak() string { return a.Name + " speaks" }
type Dog struct {
Animal // embedded
Breed string
}
func main() {
d := Dog{Animal: Animal{"Rex"}, Breed: "Labrador"}
fmt.Println(d.Name) // promoted field
fmt.Println(d.Speak()) // promoted method
}Intégration multiple
Une structure peut intégrer plusieurs types. Les conflits (même nom de champ ou de méthode) doivent être résolus explicitement :
package main
import "fmt"
type Logger struct{}
func (Logger) Log(s string) { fmt.Println("[LOG]", s) }
type Metrics struct{}
func (Metrics) Count() int { return 42 }
type Service struct {
Logger
Metrics
Name string
}
func main() {
svc := Service{Name: "auth"}
svc.Log("started") // from Logger
fmt.Println(svc.Count()) // from Metrics
}Intégration ou héritage
Go ne possède pas d'héritage de classes. L'intégration relève de la composition :
- L'intégration expose les champs et les méthodes, mais le type englobant n'est pas un sous-type
- Vous ne pouvez pas transmettre un
Doglorsqu'unAnimalest attendu - Utilisez les interfaces pour le polymorphisme et l'intégration pour réutiliser le code
Masquage des méthodes exposées
La structure englobante peut masquer une méthode intégrée en définissant sa propre méthode :
package main
import "fmt"
type Base struct{}
func (Base) Hello() string { return "Base hello" }
type Child struct{ Base }
func (Child) Hello() string { return "Child hello" } // shadows Base.Hello
func main() {
c := Child{}
fmt.Println(c.Hello()) // Child hello
fmt.Println(c.Base.Hello()) // Base hello (explicit)
}Structure anonyme pour la configuration
Utilisez une structure anonyme pour regrouper une configuration associée sans définir de type nommé :
package main
import "fmt"
func main() {
cfg := struct {
Host string
Port int
TLS bool
}{
Host: "api.example.com",
Port: 443,
TLS: true,
}
fmt.Println(cfg)
}Intégrer une interface
L'intégration d'une interface dans une structure est utile pour les simulations et les implémentations par défaut :
package main
import "fmt"
type Reader interface{ Read() string }
type Mock struct{ Reader } // embed interface
func main() {
m := Mock{}
fmt.Printf("%T\n", m.Reader) // <nil> — not set
// Assign a real impl at test time:
_ = m
}Pièges de la composition de structures
Faites attention aux points suivants :
- Sélecteurs ambigus lorsque deux types intégrés ont le même nom de champ ou de méthode
- Un pointeur intégré nul peut provoquer une panique lorsque vous appelez ses méthodes
- N'oubliez pas que l'intégration n'est pas un héritage : vous ne pouvez pas substituer le type englobant au type intégré
Comparer des structures anonymes
Deux structures anonymes ayant les mêmes noms et types de champs peuvent être affectées l'une à l'autre si leurs étiquettes correspondent également :
package main
import "fmt"
func main() {
a := struct{ X, Y int }{1, 2}
b := struct{ X, Y int }{1, 2}
fmt.Println(a == b) // true
}Vérification rapide
Quel est l'effet de l'intégration d'un type dans une structure ?
Récapitulatif : composition
À retenir :
- Les structures anonymes conviennent parfaitement aux tests pilotés par tableau et aux données de courte durée
- L'intégration expose les champs et les méthodes : il s'agit de composition, et non d'héritage
- Les types englobants peuvent masquer les méthodes intégrées
- Résolvez explicitement les sélecteurs ambigus
- Utilisez les interfaces pour le polymorphisme
Exercice pratique
Créez une structure TimestampedRecord qui intègre un Timestamp struct{ CreatedAt, UpdatedAt string } et un Data struct{ Key, Value string }. Instanciez-la et affichez tous les champs exposés.
Questions Fréquemment Posées
La leçon « Structs anonymes et composition » est-elle gratuite ?
Oui — le texte complet de « Structs anonymes et composition » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Go Academy, passe à CoddyKit PRO. Le cours Go Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Structs anonymes et composition » ?
Intégration et réutilisation du code fondée sur les structs Tu pratiques Go Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Go Academy ?
Aucune expérience préalable n'est requise. Go Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Structs anonymes et composition » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Go Academy ?
Oui. Chaque leçon Go Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Définir et utiliser des structs
- Méthodes sur les structs
- Modèles de constructeurs
- Structs anonymes et composition