Type de retour de méthode d'interface en tant qu'interface dans Go
Question :
Implémentation d'une interface La méthode qui renvoie un type d’interface dans Golang peut entraîner des erreurs de compilation. Considérez le code suivant :
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!" }
L'exécution de ce code entraîne l'erreur suivante :
cannot use a (type *A) as type IA in function argument: *A does not implement IA (wrong type for FB method) have FB() *B want FB() IB
Solution :
Pour résoudre ce problème , le type de retour de la méthode FB doit correspondre au type spécifié dans l'interface IA. Par conséquent, le changement suivant est requis :
func (a *A) FB() IB { return a.b }
Avec cette modification, le code sera compilé avec succès car le type de retour du FB est désormais IB, tel que défini dans l'interface IA.
Considérations supplémentaires :
Si les interfaces IA et IB sont définies dans des packages distincts, l'instruction d'importation pour le package contenant IB doit être inclus dans le fichier où la méthode FB est implémentée. De plus, le type de retour du FB doit être qualifié avec le nom du package approprié :
import ( "foo" // Package containing IB interface ) // Implementation in package bar func (a *A) FB() foo.IB { return a.b }
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!