Sobes.tech
Junior — Middle

Чӣ тавр муайян кардан мумкин аст, ки оё синф ё объект муайян интерфейсро иҷро мекунад?

sobes.tech AI

Ҷавоб аз AI

Дар Го, интерфейсҳо ғайрирасмӣ татбиқ мешаванд: агар як навъ ҳамаи усулҳои интерфейсро татбиқ кунад, он ба таври автоматӣ ҳамчун татбиқкунандаи он интерфейс ҳисобида мешавад.

Барои санҷидани он ки оё як навъ муайян интерфейсро татбиқ мекунад, шумо метавонед изҳороти навъ (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 интерфейсро татбиқ накунад, хато хоҳад буд

    // Санҷиш тавассути изҳороти навъ
    if _, ok := interface{}(mr).(Reader); ok {
        fmt.Println("MyReader интерфейси Reader-ро татбиқ мекунад")
    } else {
        fmt.Println("MyReader интерфейси Reader-ро татбиқ намекунад")
    }
}