Maison > développement back-end > Golang > 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
Libérer: 2024-11-13 03:56:02
original
836 Les gens l'ont consulté

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

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

type Getter interface {
    Get() string
}
Copier après la connexion

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

type Base struct {
    Getter
}
Copier après la connexion

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

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

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

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!

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