Maison  >  Article  >  développement back-end  >  Comment le remplacement de méthode peut-il être réalisé dans Go à l'aide d'interfaces ?

Comment le remplacement de méthode peut-il être réalisé dans Go à l'aide d'interfaces ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-13 03:56:02794parcourir

How Can Method Overriding Be Achieved in Go Using Interfaces?

Le remplacement de méthode dans Go avec des interfaces

Contrairement à Java, où le remplacement de méthode implique l'héritage et la modification de l'implémentation d'une classe de base, Go propose une solution utilisant interfaces.

Les interfaces définissent un ensemble de signatures de méthodes qu'un type doit implémenter. En créant une interface avec une méthode qui correspond au comportement souhaité, vous pouvez l'implémenter dans un nouveau type qui peut être utilisé à la place de celui d'origine.

Pour y parvenir, considérons l'exemple suivant :

type Base struct{}

func (base *Base) Get() string {
    return "base"
}

func (base *Base) GetName() string {
    return base.Get()
}

Pour implémenter le remplacement de méthode, créez une interface :

type Getter interface {
    Get() string
}

Modifiez le type de base pour intégrer l'interface Getter :

type Base struct {
    Getter
}

Maintenant, créez un nouveau type qui intègre Base et implémente la méthode Get :

type Sub struct {
    Base
}

func (sub *Sub) Get() string {
    return "Sub"
}

Enfin, modifiez la méthode GetName dans Base pour utiliser l'interface Getter :

func (base *Base) GetName() string {
    if g, ok := base.Getter.(Getter); ok {
        return g.Get()
    } else {
        return base.Get()
    }
}

Cette approche vous permet de fidéliser les consommateurs existants de Base tout en offrant la possibilité de remplacer la méthode Get dans les sous-classes.

Vous pouvez également utiliser la méthode suivante :

func New() *Sub {
    userType := &Sub{}
    userType.Getter = interface{}(userType).(Getter)
    return userType
}

Dans ce cas, vous devez définir manuellement le champ Getter dans le code utilisateur pour activer le remplacement de méthode. Les deux méthodes obtiennent le résultat souhaité, mais la première approche est considérée comme plus idiomatique en Go.

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