Sobes.tech
Junior — Middle

Hogyan lehet meghatározni, hogy egy adott osztály vagy objektum implementálja-e egy adott interfészt?

sobes.tech MI

Válasz az MI-től

Go-ban az interfészek nem implicit módon valósulnak meg: ha egy típus megvalósítja egy interfész összes metódusát, akkor automatikusan annak a típusnak tekintjük, hogy megvalósítja ezt az interfészt.

Az adott típus interfész megvalósításának ellenőrzéséhez használhatunk típusállítást (type assertion), vagy megpróbálhatjuk értéket rendelni ennek a típusnak egy interfész típusú változóhoz.

Példa:

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

    // Ellenőrzés hozzárendeléssel
    r = mr // ha a MyReader nem valósítja meg a Reader-t, fordítási hiba lesz

    // Ellenőrzés típusállítással
    if _, ok := interface{}(mr).(Reader); ok {
        fmt.Println("MyReader megvalósítja a Reader interfészt")
    } else {
        fmt.Println("MyReader nem valósítja meg a Reader interfészt")
    }
}