Maison > développement back-end > Golang > 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
Libérer: 2024-11-24 05:04:13
original
554 Les gens l'ont consulté

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
}
Copier après la connexion

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

type A interface {
    PrintStr() // Print First.str or Second.str
}
Copier après la connexion

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)
}
Copier après la connexion

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)
}
Copier après la connexion

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)
}
Copier après la connexion

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",
    },
}
Copier après la connexion

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!

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