请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

传参是 Scheduler,接受者是ReadyNotifier,为什么不报错,类型不匹配啊???

老师,下面是您的代码(省略无关代码):

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
这儿不太明白,能解释下吗?

正在回答 回答被采纳积分+3

1回答

ccmouse 2021-12-21 19:57:30

type Scheduler interface { ReadyNotifier Submit(Request) WorkerChan() chan Request Run() }

注意看Scheduler里面套了个ReadyNotifier。

可以回顾一下4-4 使用内嵌来扩展已有类型

这里就相当于Scheduler接口带有WorkerReady(chan Request)函数,因此它也必定实现ReadyNotifier接口。

1 回复 有任何疑惑可以回复我~
  • 多重实现啊,课程里能提到这一点就好了
    
    e.Scheduler实现了ReadNotify和Scheduler两个接口,可以用父类接口接收子类参数,等于多态
    回复 有任何疑惑可以回复我~ 2022-04-04 22:59:31
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信