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-ро татбиқ намекунад")
}
}