Maison > développement back-end > Golang > Comment implémenter des méthodes d'interface renvoyant des interfaces dans Golang ?

Comment implémenter des méthodes d'interface renvoyant des interfaces dans Golang ?

Linda Hamilton
Libérer: 2024-11-11 06:29:02
original
360 Les gens l'ont consulté

How to Implement Interface Methods Returning Interfaces in Golang?

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!"
}
Copier après la connexion

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
Copier après la connexion

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
}
Copier après la connexion

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
}
Copier après la connexion

Et l'implémentation serait :

func (a *A) FB() foo.IB {
    return a.b
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal