Maison >développement back-end >Golang >Comment implémenter une interface avec une interface comme type de retour dans Go ?

Comment implémenter une interface avec une interface comme type de retour dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-14 17:46:02983parcourir

How to Implement an Interface with an Interface as Return Type in Go?

Surmonter l'obstacle de l'implémentation d'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.

Interfaçage à travers Packages

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn