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
DDDoriginal
2024-11-15 06:35:021046parcourir

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)
}

Utilisation

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

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!

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