Maison >développement back-end >Golang >Comment puis-je éviter les implémentations de méthodes redondantes lors de l'utilisation des interfaces Go ?

Comment puis-je éviter les implémentations de méthodes redondantes lors de l'utilisation des interfaces Go ?

DDD
DDDoriginal
2024-11-13 04:28:02323parcourir

How Can I Avoid Redundant Method Implementations When Using Go Interfaces?

Surmonter la redondance dans l'implémentation de méthodes pour différents types avec les interfaces Go

Dans Go, les interfaces fournissent un moyen de définir des signatures de méthodes communes qui peuvent être mis en œuvre par différents types. Bien que cela permette le polymorphisme et la réutilisation du code, cela peut conduire à des implémentations redondantes lorsque plusieurs types implémentent la même interface.

Considérez le scénario suivant : nous avons deux structures, First et Second, qui doivent toutes deux implémenter une interface. A avec une méthode PrintStr(). Implémenter la méthode dans chaque structure individuellement serait redondant.

type First struct {
    str string
}

type Second struct {
    str string
}

type A interface {
    PrintStr()
}

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

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

Surmonter la redondance

Au lieu de dupliquer l'implémentation, nous pouvons créer un type de base qui encapsule le commun fonctionnalité. Ce type de base peut ensuite être intégré à la fois dans First et Second, leur permettant de réutiliser l'implémentation unique.

type WithString struct {
    str string
}

type First struct {
    WithString
}

type Second struct {
    WithString
}

type A interface {
    PrintStr()
}

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

Cette approche élimine la redondance et maintient la sécurité des types. Le type de base WithString constitue un moyen pratique de regrouper des fonctionnalités communes, qui peuvent être réutilisées par plusieurs types.

Utilisation

Pour utiliser la méthode PrintStr(), nous créez simplement des instances de First ou Second et intégrez le WithString type.

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

Conclusion

En utilisant les types de base et l'intégration, nous pouvons rationaliser la mise en œuvre de méthodes pour différents types qui implémentent la même interface. Cette approche favorise la réutilisation du code, réduit la redondance et garantit la sécurité des 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!

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