Implémentation de méthodes pour différents types à l'aide d'interfaces dans Go
Dans Go, les interfaces fournissent un mécanisme permettant de définir un ensemble de méthodes que différents types peuvent mettre en œuvre. Cela permet un comportement polymorphe, dans lequel différents types peuvent partager un ensemble commun d'opérations.
Énoncé du problème
Supposons que nous ayons deux structures, Première et Deuxième, que nous voulons pour implémenter une interface, A, qui définit une méthode appelée PrintStr(). Chaque structure possède un champ de chaîne nommé str. Cependant, si nous implémentons la méthode PrintStr() séparément pour les deux structures, elle devient redondante.
Solution proposée
On pourrait penser qu'il est possible d'avoir une seule implémentation de PrintStr() pour les deux structures en le définissant sur l'interface A elle-même. Cependant, cette approche ne fonctionne pas car les interfaces ne transportent aucune donnée.
Intégration et implémentation
Au lieu d'une seule implémentation sur l'interface, nous pouvons créer un type de base, WithString, et intégrez-le à la fois dans First et Second. Le type WithString aura le champ str et implémentera la méthode PrintStr(). En intégrant WithString, First et Second obtiennent indirectement le champ str et l'implémentation PrintStr(). Cela leur permet d'implémenter l'interface A avec une duplication minimale.
Exemple de code
type WithString struct { str string } type First struct { WithString } type Second struct { WithString } type A interface { PrintStr() //print First.str or Second.str } func (w WithString) PrintStr() { fmt.Print(w.str) }
Utilisation
a := First{ WithString: WithString{ str: "foo", }, }
Cette approche nous permet de mettre en œuvre une méthode commune pour différents types tout en évitant la duplication de code.
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!