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.