Surmonter la redondance dans l'implémentation de méthodes pour différents types avec les interfaces Go
Dans Go, les interfaces fournissent un moyen de définir des signatures de méthodes communes qui peuvent être mis en œuvre par différents types. Bien que cela permette le polymorphisme et la réutilisation du code, cela peut conduire à des implémentations redondantes lorsque plusieurs types implémentent la même interface.
Considérez le scénario suivant : nous avons deux structures, First et Second, qui doivent toutes deux implémenter une interface. A avec une méthode PrintStr(). Implémenter la méthode dans chaque structure individuellement serait redondant.
type First struct { str string } type Second struct { str string } type A interface { PrintStr() } func (f First) PrintStr() { fmt.Print(f.str) } func (s Second) PrintStr() { fmt.Print(s.str) }
Surmonter la redondance
Au lieu de dupliquer l'implémentation, nous pouvons créer un type de base qui encapsule le commun fonctionnalité. Ce type de base peut ensuite être intégré à la fois dans First et Second, leur permettant de réutiliser l'implémentation unique.
type WithString struct { str string } type First struct { WithString } type Second struct { WithString } type A interface { PrintStr() } func (w WithString) PrintStr() { fmt.Print(w.str) }
Cette approche élimine la redondance et maintient la sécurité des types. Le type de base WithString constitue un moyen pratique de regrouper des fonctionnalités communes, qui peuvent être réutilisées par plusieurs types.
Utilisation
Pour utiliser la méthode PrintStr(), nous créez simplement des instances de First ou Second et intégrez le WithString type.
a := First{ WithString: WithString{ str: "foo", }, }
Conclusion
En utilisant les types de base et l'intégration, nous pouvons rationaliser la mise en œuvre de méthodes pour différents types qui implémentent la même interface. Cette approche favorise la réutilisation du code, réduit la redondance et garantit la sécurité des types.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!