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")
}
}