Maison  >  Article  >  développement back-end  >  Comment puis-je implémenter des méthodes d'interface pour des types différents dans Golang ?

Comment puis-je implémenter des méthodes d'interface pour des types différents dans Golang ?

DDD
DDDoriginal
2024-11-24 05:04:13481parcourir

How can I implement interface methods for dissimilar types in Golang?

Implémentation de méthodes d'interface dans des types différents à l'aide d'interfaces Golang

Dans Go, il est souvent souhaitable que différents types de structures de données implémentent la même interface proposer un ensemble commun de comportements. Par exemple, considérons deux structures :

type First struct {
    str string
}
type Second struct {
    str string
}

Nous souhaitons que les deux structures implémentent l'interface A :

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

Cependant, implémenter PrintStr() pour chaque structure séparément semble redondant :

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

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

Il serait idéal d'avoir une seule implémentation pour toutes les structures implémentant A. Tenter de le faire directement ne signifie pas work :

func (a A) PrintStr() {
    fmt.Print(a.str)
}

La raison en est que a n'a pas de champ str. Au lieu de cela, une solution plus élégante consiste à créer un type de base et à l'intégrer dans nos deux structures :

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

Ici, WithString sert de type de base, et First et Second l'intègrent. Cela nous donne une implémentation centralisée pour PrintStr().

Exemple d'utilisation :

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

Notez que nous pouvons créer une instance de First en intégrant une instance de WithString. Cette technique nous permet d'atteindre notre objectif d'avoir une implémentation pour plusieurs types différents qui implémentent la même interface.

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