Sobes.tech
Junior — Middle

როგორ შეიძლება დადგინდეს, რომ კონკრეტული კლასი ან ობიექტი ახორციელებს გარკვეულ ინტერფეისს?

sobes.tech AI

პასუხი AI-სგან

Go-ში ინტერფეისები განახორციელებენ არაპირდაპირ: თუ ტიპი ახორციელებს ინტერფეისის ყველა მეთოდს, ის ავტომატურად ითვლება ამ ინტერფეისის განახორციელებლად.

შეამოწმეთ, ახორციელებს თუ არა კონკრეტული ტიპი ინტერფეისს, შეგიძლიათ გამოიყენოთ ტიპის დადასტურება (type 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

    // ინტერფეისის განახორციელების შემოწმება გადაწერით
    r = mr // თუ MyReader არ ახორციელებს Reader-ს, იქნება შეცდომა

    // ტიპის დადასტურებით შემოწმება
    if _, ok := interface{}(mr).(Reader); ok {
        fmt.Println("MyReader ახორციელებს Reader ინტერფეისს")
    } else {
        fmt.Println("MyReader არ ახორციელებს Reader ინტერფეისს")
    }
}