Junior — Middle
Ինչպե՞ս որոշել, որ կոնկրետ դասը կամ օբյեկտը իրականացնում է որոշակի ինտերֆեյս։
sobes.tech AI
Պատասխան AI-ից
Go-ում ինտերֆեյսները իրականացնում են անուղղակիորեն. եթե մի տեսակ իրականացնում է ինտերֆեյսի բոլոր մեթոդները, ապա այն ավտոմատ կերպով համարվում է այդ ինտերֆեյսի իրականացմանը:
Որպեսզի ստուգեք, արդյոք կոնկրետ տեսակն իրականացնում է ինտերֆեյսը, կարող եք օգտագործել տեսակ 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
// Ստուգում՝ արդյոք MyReader-ը իրականացնում է ինտերֆեյսը՝ վերագրելով
r = mr // եթե MyReader-ը չի իրականացնում Reader-ը, կգրանցվի սխալ
// Ստուգում՝ տեսակ assertion-ով
if _, ok := interface{}(mr).(Reader); ok {
fmt.Println("MyReader-ը իրականացնում է Reader ինտերֆեյսը")
} else {
fmt.Println("MyReader-ը չի իրականացնում Reader ինտերֆեյսը")
}
}