Maison > développement back-end > Golang > le corps du texte

Comment implémenter des méthodes d'interface avec des types de retour d'interface dans Go ?

Susan Sarandon
Libérer: 2024-11-09 15:12:02
original
533 Les gens l'ont consulté

How to Implement Interface Methods with Interface Return Types in Go?

Implémentation d'une méthode d'interface avec un type de retour d'interface dans Go

Dans Go, on peut rencontrer une situation où une méthode d'interface a une interface comme interface type de retour. Cela soulève la question de savoir comment implémenter une telle méthode.

Considérez l'exemple de code fourni :

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

Lors de la tentative de compilation de ce code, une erreur se produit car la méthode FB de la structure A renvoie un type concret *B au lieu du type d'interface IB requis.

Pour résoudre ce problème, modifiez simplement la méthode FB dans la structure A pour renvoyer le type d'interface IB :

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

Maintenant , la structure A implémente correctement l'interface IA et peut être utilisée comme type IA.

Dans les cas où les interfaces sont définies dans différents packages, il est toujours possible d'implémenter la méthode de manière appropriée. Par exemple, si IA et IB sont définis dans le package foo et que les implémentations sont dans le package bar, la déclaration et l'implémentation seraient les suivantes :

Déclaration (dans le package foo) :

type IA interface {
    FB() IB
}
Copier après la connexion

Implémentation (dans le package bar) :

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

En convertissant la valeur renvoyée dans le type d'interface requis, l'implémentation peut se conformer à l'interface requise et compiler avec succès.

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