Maison >développement back-end >Golang >Go prend-il en charge le polymorphisme : trouver des solutions de contournement pour les méthodes Setter ?

Go prend-il en charge le polymorphisme : trouver des solutions de contournement pour les méthodes Setter ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-25 13:27:11256parcourir

Does Go Support Polymorphism: Finding Workarounds for Setter Methods?

Polymorphisme en Go : existe-t-il ?

Le polymorphisme, la capacité pour des objets de classes différentes d'avoir des méthodes identiques, est un aspect fondamental de programmation orientée objet. Dans Go, cependant, les méthodes de définition des interfaces semblent indisponibles.

Examinons un exemple de base :

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
}

Lorsque ce code est exécuté, la méthode Set pour le type MyStruct échoue car le récepteur n'est pas un pointeur. Toutes les modifications apportées à ce paramètre sont perdues à la fermeture de la fonction.

On pourrait tenter de résoudre ce problème en changeant le récepteur en pointeur :

func (this *MyStruct) Set(i int) {
    this.data = i
}

Cependant, cela entraînerait une erreur de compilation . Les méthodes d'interface dans Go ne peuvent pas avoir de récepteurs de pointeurs.

Alors, existe-t-il un moyen d'obtenir un polymorphisme dans ce scénario ?

L'alternative la plus proche est d'utiliser un type d'interface et une structure anonyme qui implémente l'interface :

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

var mi MyInterfacer = &MyStruct{123}
fmt.Println(mi.Get()) // prints 123

mi.Set(456)
fmt.Println(mi.Get()) // prints 456

Bien que cette solution ne soit pas un vrai polymorphisme, elle utilise une interface pour fournir un environnement propre et flexible façon de manipuler des objets de différents types.

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