传参是 Scheduler,接受者是ReadyNotifier,为什么不报错,类型不匹配啊???
来源:16-5 重构和总结

SuperDi
2021-12-12
老师,下面是您的代码(省略无关代码):
type Scheduler interface {
ReadyNotifier
Submit(Request)
WorkerChan() chan Request
Run()
}
type ReadyNotifier interface {
WorkerReady(chan Request)
}
func (e *ConcurrentEngine) Run(seeds ...Request) {
for i := 0; i < e.WorkerCount; i++{
createWorker(e.Scheduler.WorkerChan(), out, e.Scheduler)
}
}
func createWorker(in chan Request, out chan ParseResult, ready ReadyNotifier) {
。。。。
}
createWorker(e.Scheduler.WorkerChan(), out, e.Scheduler) 传入的参数是 e.Scheduler 为什么接受者居然是ReadyNotifier
这儿不太明白,能解释下吗?
写回答
1回答
-
ccmouse
2021-12-21
type Scheduler interface { ReadyNotifier Submit(Request) WorkerChan() chan Request Run() }
注意看Scheduler里面套了个ReadyNotifier。
可以回顾一下4-4 使用内嵌来扩展已有类型
这里就相当于Scheduler接口带有WorkerReady(chan Request)函数,因此它也必定实现ReadyNotifier接口。
112022-04-04
相似问题