"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > ## Como converter uma fatia de interfaces em uma fatia de interface compatível no Go?

## Como converter uma fatia de interfaces em uma fatia de interface compatível no Go?

Publicado em 2024-11-02
Navegar:775

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

Convertendo fatias de interfaces em fatias de interface compatíveis

A implementação de diferentes interfaces que contêm métodos sobrepostos pode fornecer flexibilidade na programação. No entanto, passar uma fatia de uma interface para uma função que espera uma interface diferente, mas compatível, pode resultar em erros. Vamos explorar como resolver esse problema em Go.

Suponha que temos interfaces A e B, onde A inclui B. Uma implementação de A, Impl, satisfaz A e B.

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
}

Itens individuais podem ser passados ​​entre funções com facilidade. No entanto, a tentativa de passar fatias de A para funções que esperam io.Reader pode falhar.

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)

Para resolver isso, podemos criar uma nova fatia do tipo []io.Reader e preenchê-la com elementos de []A. Esta é a solução alternativa para contornar a limitação e garantir a compatibilidade entre tipos de interface diferentes, mas sobrepostos.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3