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
Libérer: 2024-11-25 13:27:11
original
246 Les gens l'ont consulté

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

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

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

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!

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