Maison  >  Article  >  développement back-end  >  ## Comment convertir une tranche d'interfaces en tranche d'interface compatible dans Go ?

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-24 18:28:55766parcourir

## 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>

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>

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!

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