Sobes.tech
Junior — Middle

Ինչպե՞ս որոշել, որ կոնկրետ դասը կամ օբյեկտը իրականացնում է որոշակի ինտերֆեյս։

sobes.tech AI

Պատասխան AI-ից

Go-ում ինտերֆեյսները իրականացնում են անուղղակիորեն. եթե մի տեսակ իրականացնում է ինտերֆեյսի բոլոր մեթոդները, ապա այն ավտոմատ կերպով համարվում է այդ ինտերֆեյսի իրականացմանը:

Որպեսզի ստուգեք, արդյոք կոնկրետ տեսակն իրականացնում է ինտերֆեյսը, կարող եք օգտագործել տեսակ assertion կամ փորձել վերագրել այդ տեսակից արժեքը ինտերֆեյսի տիպի փոփոխականի:

Օրինակ՝

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

    // Ստուգում՝ արդյոք MyReader-ը իրականացնում է ինտերֆեյսը՝ վերագրելով
    r = mr // եթե MyReader-ը չի իրականացնում Reader-ը, կգրանցվի սխալ

    // Ստուգում՝ տեսակ assertion-ով
    if _, ok := interface{}(mr).(Reader); ok {
        fmt.Println("MyReader-ը իրականացնում է Reader ինտերֆեյսը")
    } else {
        fmt.Println("MyReader-ը չի իրականացնում Reader ինտերֆեյսը")
    }
}