Maison >développement back-end >Golang >Comment implémenter une interface avec une interface comme type de retour dans Go ?
Dans Go, il est possible de rencontrer une erreur en essayant d'implémenter une interface avec un type de retour qui est également une interface. Cette question approfondit ce problème et fournit une solution qui résout l'erreur.
Le code fourni démontre une interface IA avec une méthode FB(), qui devrait renvoyer une interface IB. Cependant, l'implémentation de FB dans la structure A renvoie un type concret *B au lieu de IB.
Pour rectifier cette erreur, modifiez simplement le type de retour de FB dans la structure A pour qu'il soit IB au lieu de *B :
func (a *A) FB() IB { return a.b }
Cette modification garantit que A implémente correctement l'interface IA et résout l'erreur.
La question porte également sur la définition d'interfaces dans des packages séparés. Cette approche est réalisable dans Go, vous permettant de partager des interfaces entre différents packages. Cependant, lorsque l'implémentation est dans un package différent, il est nécessaire d'utiliser le nom d'interface complet dans l'implémentation.
Par exemple, si IA et IB sont définis dans le package foo et que l'implémentation est dans la barre du package, la déclaration dans package bar serait :
type IA interface { FB() foo.IB }
Alors que l'implémentation dans bar deviendrait :
func (a *A) FB() foo.IB { return a.b }
Cet ajustement garantit que le type de retour de FB correspond au type attendu spécifié dans l'interface IA, quel que soit le package dans lequel l'interface est définie.
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!