Junior — Middle
Kuidas saab kindlaks teha, kas konkreetne klass või objekt rakendab kindlat liidest?
sobes.tech AI
Vastus AI-lt
Go keeles rakenduvad liideseid mittevaistlikult: kui tüüp rakendab kõiki liidese meetodeid, loetakse ta automaatselt selle liidese rakendajaks.
Et kontrollida, kas konkreetne tüüp rakendab liidest, saab kasutada tüüpi väidet (type assertion) või proovida määrata selle tüübi väärtust liidese tüüpi muutujale.
Näide:
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
// Kontroll liidese rakendamise kohta määramise kaudu
r = mr // kui MyReader ei rakenda Readerit, tekib kompileerimisviga
// Kontroll tüüpi väitega
if _, ok := interface{}(mr).(Reader); ok {
fmt.Println("MyReader rakendab Reader liidest")
} else {
fmt.Println("MyReader ei rakenda Reader liidest")
}
}