Implémentation de la méthode d'interface renvoyant une interface dans Golang
Lorsque vous tentez d'implémenter une interface qui renvoie une autre interface, une erreur courante se produit lorsque le retour Le type de la méthode ne correspond pas au type attendu défini dans l’interface. Considérez l'extrait de 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înera 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 :
Le problème réside dans le type de retour de la méthode FB dans la structure A. L'interface IA s'attend à ce que FB renvoie un IB, mais dans l'implémentation, il renvoie un *B. Pour rectifier cela, modifiez le type de retour de FB vers IB comme suit :
func (a *A) FB() IB { return a.b }
Partage des interfaces entre packages :
Il est possible de définir des interfaces dans différents packages et partagez-les. Dans de tels cas, lors de l'implémentation de l'interface dans une structure, le chemin complet du package doit être utilisé pour le type de retour de la méthode. Par exemple, si IA et IB sont définis dans un package appelé foo et que l'implémentation est dans un package appelé bar, la déclaration serait :
type IA interface { FB() foo.IB }
Et l'implémentation serait :
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!