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 }
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 }
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!