Maison > Article > développement back-end > Comment puis-je implémenter des méthodes d'interface pour des types différents dans Golang ?
Implémentation de méthodes d'interface dans des types différents à l'aide d'interfaces Golang
Dans Go, il est souvent souhaitable que différents types de structures de données implémentent la même interface proposer un ensemble commun de comportements. Par exemple, considérons deux structures :
type First struct { str string } type Second struct { str string }
Nous souhaitons que les deux structures implémentent l'interface A :
type A interface { PrintStr() // Print First.str or Second.str }
Cependant, implémenter PrintStr() pour chaque structure séparément semble redondant :
func (f First) PrintStr() { fmt.Print(f.str) } func (s Second) PrintStr() { fmt.Print(s.str) }
Il serait idéal d'avoir une seule implémentation pour toutes les structures implémentant A. Tenter de le faire directement ne signifie pas work :
func (a A) PrintStr() { fmt.Print(a.str) }
La raison en est que a n'a pas de champ str. Au lieu de cela, une solution plus élégante consiste à créer un type de base et à l'intégrer dans nos deux structures :
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) }
Ici, WithString sert de type de base, et First et Second l'intègrent. Cela nous donne une implémentation centralisée pour PrintStr().
Exemple d'utilisation :
a := First{ WithString: WithString{ str: "foo", }, }
Notez que nous pouvons créer une instance de First en intégrant une instance de WithString. Cette technique nous permet d'atteindre notre objectif d'avoir une implémentation pour plusieurs types différents qui implémentent la même interface.
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!