Maison > développement back-end > Golang > Pourquoi le type de retour de ma méthode d'interface Go provoque-t-il une erreur de compilation ?

Pourquoi le type de retour de ma méthode d'interface Go provoque-t-il une erreur de compilation ?

Linda Hamilton
Libérer: 2024-11-09 22:38:02
original
799 Les gens l'ont consulté

Why Does My Go Interface Method Return Type Cause a Compilation Error?

Type de retour de méthode d'interface en tant qu'interface dans Go

Question :

Implémentation d'une interface La méthode qui renvoie un type d’interface dans Golang peut entraîner des erreurs de compilation. Considérez le 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îne 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 :

Pour résoudre ce problème , le type de retour de la méthode FB doit correspondre au type spécifié dans l'interface IA. Par conséquent, le changement suivant est requis :

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

Avec cette modification, le code sera compilé avec succès car le type de retour du FB est désormais IB, tel que défini dans l'interface IA.

Considérations supplémentaires :

Si les interfaces IA et IB sont définies dans des packages distincts, l'instruction d'importation pour le package contenant IB doit être inclus dans le fichier où la méthode FB est implémentée. De plus, le type de retour du FB doit être qualifié avec le nom du package approprié :

import (
    "foo" // Package containing IB interface
)

// Implementation in package bar
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