Maison > développement back-end > Golang > le corps du texte

## Comment convertir une tranche d'interfaces en tranche d'interface compatible dans Go ?

Mary-Kate Olsen
Libérer: 2024-10-24 18:28:55
original
782 Les gens l'ont consulté

## How to Convert a Slice of Interfaces to a Compatible Interface Slice in Go?

Conversion de tranches d'interfaces en tranches d'interface compatibles

La mise en œuvre de différentes interfaces contenant des méthodes qui se chevauchent peut offrir une flexibilité de programmation. Cependant, transmettre une tranche d’une interface à une fonction attendant une interface différente mais compatible peut entraîner des erreurs. Voyons comment résoudre ce problème dans Go.

Supposons que nous ayons les interfaces A et B, où A inclut B. Une implémentation de A, Impl, satisfait à la fois A et B.

<code class="go">type A interface {
    Close() error
    Read(b []byte) (int, error)
}

type Impl struct {}

func (I Impl) Read(b []byte) (int, error) {
    fmt.Println("In read!")
    return 10, nil
}

func (I Impl) Close() error {
    fmt.Println("I am here!")
    return nil
}</code>
Copier après la connexion

Les éléments individuels peuvent être facilement transmis d'une fonction à l'autre. Cependant, tenter de transmettre des tranches de A aux fonctions attendant io.Reader peut échouer.

<code class="go">func single(r io.Reader) {
    fmt.Println("in single")
}

func slice(r []io.Reader) {
    fmt.Println("in slice")
}

im := &Impl{}

// works
single(im)

// FAILS!
list := []A{t}
slice(list)</code>
Copier après la connexion

Pour résoudre ce problème, nous pouvons créer une nouvelle tranche de type []io.Reader et la remplir avec des éléments de [ ]UN. Il s'agit de la solution de contournement pour contourner la limitation et garantir la compatibilité entre des types d'interface différents mais qui se chevauchent.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!