Sobes.tech
Junior — Middle

Ma'lum bir sinf yoki ob'ekt ma'lum bir interfeysni amalga oshirayotganligini qanday aniqlash mumkin?

sobes.tech AI

AIdan javob

Go'da interfeyslar noaniq tarzda amalga oshiriladi: agar tur interfeysning barcha metodlarini amalga oshirsa, u avtomatik ravishda bu interfeysni amalga oshiruvchi hisoblanadi.

Muayyan turning interfeysni amalga oshirayotganligini tekshirish uchun tur tasdiqlash (type assertion) yoki bu turdan qiymatni interfeys turidagi o'zgaruvchiga tayinlashga harakat qilish mumkin.

Misol:

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

    // Tashqi tayyorlash orqali interfeysni amalga oshirishni tekshirish
    r = mr // agar MyReader, Reader'ni amalga oshirmasa, xato bo'ladi

    // Tur tasdiqlash orqali tekshirish
    if _, ok := interface{}(mr).(Reader); ok {
        fmt.Println("MyReader, Reader interfeysini amalga oshiradi")
    } else {
        fmt.Println("MyReader, Reader interfeysini amalga oshirmaydi")
    }
}

Shu tarzda, Go kompilyatori interfeysga mosligini kafolatlaydi va ish vaqtida tur tasdiqlash yordamida tekshirish mumkin.