"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ## ¿Cómo convertir un segmento de interfaces en un segmento de interfaz compatible en Go?

## ¿Cómo convertir un segmento de interfaces en un segmento de interfaz compatible en Go?

Publicado el 2024-11-02
Navegar:740

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

Conversión de sectores de interfaces en sectores de interfaz compatibles

La implementación de diferentes interfaces que contienen métodos superpuestos puede proporcionar flexibilidad en la programación. Sin embargo, pasar una porción de una interfaz a una función que espera una interfaz diferente pero compatible puede generar errores. Exploremos cómo abordar este problema en Go.

Supongamos que tenemos las interfaces A y B, donde A incluye B. Una implementación de A, Impl, satisface tanto A como 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
}

Los elementos individuales se pueden pasar entre funciones con facilidad. Sin embargo, intentar pasar porciones de A a funciones que esperan io.Reader puede fallar.

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 esto, podemos crear un nuevo segmento de tipo []io.Reader y completarlo con elementos de []A. Esta es la solución para evitar la limitación y garantizar la compatibilidad entre tipos de interfaz diferentes pero superpuestos.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3