Junior — Middle
Müəyyən bir sinifin və ya obyektin müəyyən bir interfeysə uyğun olub-olmadığını necə müəyyən etmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
Go-da interfeyslər qeyri-şərti şəkildə həyata keçirilir: əgər bir növ interfeysin bütün metodlarını həyata keçirirsə, avtomatik olaraq həmin interfeysi həyata keçirən hesab olunur.
Müəyyən bir növün interfeysi həyata keçirib-keçmədiyini yoxlamaq üçün növ təsdiqi (type assertion) istifadə edə və ya həmin növdən olan dəyəri interfeys tipli dəyişənə təyin etməyə cəhd edə bilərsiniz.
Nümunə:
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
// Təyin etmə yolu ilə interfeysi həyata keçirməyi yoxlamaq
r = mr // əgər MyReader, Reader-i həyata keçirməzsə, səhv olacaq
// Növ təsdiqi ilə yoxlama
if _, ok := interface{}(mr).(Reader); ok {
fmt.Println("MyReader, Reader interfeysini həyata keçirir")
} else {
fmt.Println("MyReader, Reader interfeysini həyata keçirmir")
}
}
Bu şəkildə, Go tərtibçisi interfeysə uyğunluğu təmin edir və iş vaxtında növ təsdiqi ilə yoxlama aparıla bilər.