Junior — Middle
Cum se poate determina dacă o anumită clasă sau obiect implementează o anumită interfață?
sobes.tech AI
Răspuns de la AI
În Go, interfețele sunt implementate în mod implicit: dacă un tip implementează toate metodele unei interfețe, acesta este considerat automat ca implementând acea interfață.
Pentru a verifica dacă un tip specific implementează o interfață, se poate folosi o afirmație de tip sau se poate încerca să se atribuie o valoare de acel tip unei variabile de tip interfață.
Exemplu:
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
// Verificare implementare interfață prin atribuire
r = mr // dacă MyReader nu implementează Reader, va fi o eroare de compilare
// Verificare prin afirmație de tip
if _, ok := interface{}(mr).(Reader); ok {
fmt.Println("MyReader implementează interfața Reader")
} else {
fmt.Println("MyReader nu implementează interfața Reader")
}
}
Astfel, compilatorul Go garantează conformitatea cu interfața, iar la runtime se poate verifica folosind o afirmație de tip.