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.