Maison >développement back-end >Golang >Comment puis-je éviter les implémentations de méthodes redondantes pour différents types à l'aide d'interfaces dans Go ?

Comment puis-je éviter les implémentations de méthodes redondantes pour différents types à l'aide d'interfaces dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-13 09:25:02733parcourir

How Can I Avoid Redundant Method Implementations for Different Types Using Interfaces in Go?

Implémentation de méthodes communes pour différents types à l'aide d'interfaces

Dans Go, les interfaces fournissent un mécanisme puissant pour définir des contrats que plusieurs types peuvent implémenter. Cependant, il peut parfois sembler redondant d'implémenter des méthodes similaires pour plusieurs types implémentant la même interface.

Pour résoudre ce problème, considérons l'exemple de deux structures, First et Second, qui contiennent toutes deux un champ de chaîne nommé str. Nous voulons que les deux structures implémentent une interface A qui définit une méthode PrintStr() pour imprimer la valeur de str.

Au départ, il peut sembler naturel de définir des implémentations distinctes pour First et Second, comme suit :

type First struct {
    str string
}

func (f First) PrintStr() {
    fmt.Print(f.str)
}

type Second struct {
    str string
}

func (s Second) PrintStr() {
    fmt.Print(s.str)
}

Cependant, cette approche est effectivement répétitive. Pour éviter la redondance, nous pouvons plutôt recourir à une approche compositionnelle. Nous pouvons définir un type de base WithString qui contient la fonctionnalité commune et l'intégrer dans les structures First et Second. Cela nous permet de définir la méthode PrintStr() une seule fois dans le type de base :

type WithString struct {
    str string
}

func (w WithString) PrintStr() {
    fmt.Print(w.str)
}

type First struct {
    WithString
}

type Second struct {
    WithString
}

type A interface {
    PrintStr()
}

Cette technique dissocie efficacement l'implémentation de la méthode PrintStr() des types spécifiques First et Second, ce qui entraîne un plus Base de code concise et maintenable.

Par exemple, étant donné l'utilisation suivante :

a := First{
    WithString: WithString{
        str: "foo",
    },
}

L'appel de a.PrintStr() affichera "foo" car First intègre le type WithString, qui fournit le PrintStr ().

En utilisant la composition et les interfaces, Go nous permet de créer des hiérarchies de types où différents types peuvent partager des fonctionnalités communes sans avoir besoin de code redondant.

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