Sobes.tech
Junior — Middle

¿Cómo se puede determinar si una clase u objeto específico implementa una interfaz determinada?

sobes.tech AI

Respuesta de la IA

En Go, las interfaces se implementan de manera implícita: si un tipo implementa todos los métodos de una interfaz, se considera que implementa esa interfaz automáticamente.

Para verificar si un tipo específico implementa una interfaz, se puede usar una afirmación de tipo o intentar asignar un valor de ese tipo a una variable de tipo interfaz.

Ejemplo:

package main
import "fmt"

type Reader interface {
    Read(p []byte) (n int, err error)
}

type MyReader struct {}

func (r MyReader) Read(p []byte) (n int, err error) {
    return 0, nil
}

func main() {
    var r Reader
    var mr MyReader

    // Verificación de implementación de interfaz mediante asignación
    r = mr // si MyReader no implementa Reader, habrá un error de compilación

    // Verificación mediante afirmación de tipo
    if _, ok := interface{}(mr).(Reader); ok {
        fmt.Println("MyReader implementa la interfaz Reader")
    } else {
        fmt.Println("MyReader no implementa la interfaz Reader")
    }
}

De esta manera, el compilador de Go garantiza la conformidad con la interfaz, y en tiempo de ejecución se puede verificar mediante una afirmación de tipo.