Sobes.tech
Junior — Middle

Müəyyən bir sinifin və ya obyektin müəyyən bir interfeysə uyğun olub-olmadığını necə müəyyən etmək olar?

sobes.tech Süni İntellekt

AI-dan cavab

Go-da interfeyslər qeyri-şərti şəkildə həyata keçirilir: əgər bir növ interfeysin bütün metodlarını həyata keçirirsə, avtomatik olaraq həmin interfeysi həyata keçirən hesab olunur.

Müəyyən bir növün interfeysi həyata keçirib-keçmədiyini yoxlamaq üçün növ təsdiqi (type assertion) istifadə edə və ya həmin növdən olan dəyəri interfeys tipli dəyişənə təyin etməyə cəhd edə bilərsiniz.

Nümunə:

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

    // Təyin etmə yolu ilə interfeysi həyata keçirməyi yoxlamaq
    r = mr // əgər MyReader, Reader-i həyata keçirməzsə, səhv olacaq

    // Növ təsdiqi ilə yoxlama
    if _, ok := interface{}(mr).(Reader); ok {
        fmt.Println("MyReader, Reader interfeysini həyata keçirir")
    } else {
        fmt.Println("MyReader, Reader interfeysini həyata keçirmir")
    }
}

Bu şəkildə, Go tərtibçisi interfeysə uyğunluğu təmin edir və iş vaxtında növ təsdiqi ilə yoxlama aparıla bilər.