Maison > développement back-end > Golang > Comment Go implémente-t-il le polymorphisme sans l'appliquer ?

Comment Go implémente-t-il le polymorphisme sans l'appliquer ?

Mary-Kate Olsen
Libérer: 2024-11-06 02:29:02
original
426 Les gens l'ont consulté

How Does Go Implement Polymorphism Without Enforcing It?

Polymorphisme en Go

Dans la programmation orientée objet, le polymorphisme permet à une seule interface de faire référence à des objets de plusieurs types. Go n'applique pas strictement ce concept, mais il propose des moyens alternatifs pour obtenir un comportement similaire.

Considérez l'extrait de code suivant :

type Foo struct {
   ...
}

type Bar struct {
   Foo
   ...
}

func getFoo() Foo {
   return Bar{...}
}
Copier après la connexion

Comme vous l'avez remarqué, dans Go, ce code génère un erreur indiquant que getFoo() doit renvoyer une instance de Foo. Pour obtenir un comportement polymorphe, vous pouvez utiliser des interfaces et une composition dans Go :

package main

import "fmt"

type Foo interface {
   printFoo()
}

type FooImpl struct {

}

type Bar struct {
   FooImpl
}

type Bar2 struct {
   FooImpl
}

func (f FooImpl)printFoo(){
    fmt.Println("Print Foo Impl")
}

func getFoo() Foo {
   return Bar{}
}

func main() {
    fmt.Println("Hello, playground")
    b := getFoo()
    b.printFoo()
}
Copier après la connexion

Dans cet exemple mis à jour :

  • Nous définissons une interface appelée Foo qui déclare une fonction printFoo.
  • FooImpl implémente l'interface Foo.
  • Bar et Bar2 sont des structures qui intègrent le type FooImpl.
  • La fonction getFoo() renvoie une valeur qui implémente l'interface Foo, permettant pour renvoyer une instance Bar ou Bar2.
  • Lors de l'appel de printFoo sur la valeur renvoyée par getFoo(), Go distribue dynamiquement la méthode en fonction du type sous-jacent.

Cette technique fournit un moyen d'obtenir le polymorphisme dans Go en utilisant des interfaces et une composition, permettant d'utiliser une seule interface pour différents types de béton.

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