Sobes.tech
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")
    }
}