Implémentation d'une méthode d'interface avec un type de retour d'interface dans Go
Dans Go, on peut rencontrer une situation où une méthode d'interface a une interface comme interface type de retour. Cela soulève la question de savoir comment implémenter une telle méthode.
Considérez l'exemple de code fourni :
type IA interface { FB() IB } type IB interface { Bar() string } type A struct { b *B } func (a *A) FB() *B { return a.b } type B struct{} func (b *B) Bar() string { return "Bar!" }
Lors de la tentative de compilation de ce code, une erreur se produit car la méthode FB de la structure A renvoie un type concret *B au lieu du type d'interface IB requis.
Pour résoudre ce problème, modifiez simplement la méthode FB dans la structure A pour renvoyer le type d'interface IB :
func (a *A) FB() IB { return a.b }
Maintenant , la structure A implémente correctement l'interface IA et peut être utilisée comme type IA.
Dans les cas où les interfaces sont définies dans différents packages, il est toujours possible d'implémenter la méthode de manière appropriée. Par exemple, si IA et IB sont définis dans le package foo et que les implémentations sont dans le package bar, la déclaration et l'implémentation seraient les suivantes :
Déclaration (dans le package foo) :
type IA interface { FB() IB }
Implémentation (dans le package bar) :
func (a *A) FB() foo.IB { return a.b }
En convertissant la valeur renvoyée dans le type d'interface requis, l'implémentation peut se conformer à l'interface requise et compiler avec succès.
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!