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 интерфейсин ишке ашырган эмес")
}
}