Junior — Middle
Como é que se pode determinar se uma determinada classe ou objeto implementa uma interface específica?
sobes.tech IA
Resposta da IA
Em Go, as interfaces são implementadas de forma implícita: se um tipo implementar todos os métodos de uma interface, ele é automaticamente considerado como implementando essa interface.
Para verificar se um tipo específico implementa uma interface, pode-se usar uma afirmação de tipo ou tentar atribuir um valor desse tipo a uma variável de tipo interface.
Exemplo:
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
// Verificação de implementação de interface por atribuição
r = mr // se MyReader não implementar Reader, ocorrerá erro de compilação
// Verificação por afirmação de tipo
if _, ok := interface{}(mr).(Reader); ok {
fmt.Println("MyReader implementa a interface Reader")
} else {
fmt.Println("MyReader não implementa a interface Reader")
}
}
Dessa forma, o compilador Go garante a conformidade com a interface, e em tempo de execução pode-se verificar usando uma afirmação de tipo.