Maison > développement back-end > Golang > Comment les interfaces de Go peuvent-elles être utilisées pour implémenter des méthodes pour différents types sans duplication de code ?

Comment les interfaces de Go peuvent-elles être utilisées pour implémenter des méthodes pour différents types sans duplication de code ?

DDD
Libérer: 2024-11-15 06:35:02
original
1026 Les gens l'ont consulté

How Can Interfaces in Go Be Used to Implement Methods for Different Types Without Code Duplication?

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

Dans Go, les interfaces fournissent un mécanisme permettant de définir un ensemble de méthodes que différents types peuvent mettre en œuvre. Cela permet un comportement polymorphe, dans lequel différents types peuvent partager un ensemble commun d'opérations.

Énoncé du problème

Supposons que nous ayons deux structures, Première et Deuxième, que nous voulons pour implémenter une interface, A, qui définit une méthode appelée PrintStr(). Chaque structure possède un champ de chaîne nommé str. Cependant, si nous implémentons la méthode PrintStr() séparément pour les deux structures, elle devient redondante.

Solution proposée

On pourrait penser qu'il est possible d'avoir une seule implémentation de PrintStr() pour les deux structures en le définissant sur l'interface A elle-même. Cependant, cette approche ne fonctionne pas car les interfaces ne transportent aucune donnée.

Intégration et implémentation

Au lieu d'une seule implémentation sur l'interface, nous pouvons créer un type de base, WithString, et intégrez-le à la fois dans First et Second. Le type WithString aura le champ str et implémentera la méthode PrintStr(). En intégrant WithString, First et Second obtiennent indirectement le champ str et l'implémentation PrintStr(). Cela leur permet d'implémenter l'interface A avec une duplication minimale.

Exemple de code

type WithString struct {
    str string
}

type First struct {
    WithString
}

type Second struct {
    WithString
}

type A interface {
    PrintStr() //print First.str or Second.str
}

func (w WithString) PrintStr() {
    fmt.Print(w.str)
}
Copier après la connexion

Utilisation

a := First{
    WithString: WithString{
        str: "foo",
    },
}
Copier après la connexion

Cette approche nous permet de mettre en œuvre une méthode commune pour différents types tout en évitant la duplication de code.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal