Sobes.tech
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.