Maison > développement back-end > Golang > Comment obtenir le polymorphisme avec les Setters in Go ?

Comment obtenir le polymorphisme avec les Setters in Go ?

Linda Hamilton
Libérer: 2024-12-10 10:41:10
original
879 Les gens l'ont consulté

How Can Polymorphism Be Achieved with Setters in Go?

Polymorphisme en Go : décoder l'énigme de Setter

Dans le domaine de la programmation orientée objet, le polymorphisme permet de traiter des objets de différentes classes comme instances d'un super-type commun. Cependant, en Go, la question se pose : le polymorphisme existe-t-il et, si oui, comment se manifeste-t-il ?

Considérez le code Go suivant, où l'on tente de créer une interface avec les méthodes getter et setter :

type MyInterfacer interface {
    Get() int
    Set(i int)
}

type MyStruct struct {
    data int
}

func (this MyStruct) Get() int {
    return this.data
}

func (this MyStruct) Set(i int) {
    this.data = i
}
Copier après la connexion

Cependant, la méthode setter rencontre un problème : le récepteur de ce MyStruct n'est pas un pointeur, ce qui entraîne la perte de toutes les modifications apportées à la méthode une fois celle-ci terminée. De plus, définir le récepteur comme *MyStruct gênerait la compilation.

Pour résoudre ce problème, une version corrigée du code utilise des pointeurs :

type MyInterfacer interface {
    Get() int
    Set(i int)
}

type MyStruct struct {
    data int
}

func (this *MyStruct) Get() int {
    return this.data
}

func (this *MyStruct) Set(i int) {
    this.data = i
}
Copier après la connexion

En introduisant des pointeurs, nous permettons les modifications apportées au sein du méthode setter pour persister au-delà de sa portée. Bien que cette technique ne constitue pas un polymorphisme strict au sens traditionnel, elle adhère aux bonnes pratiques du Go et fournit une solution viable au problème initial.

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