time.AfterFunc()
来源:10-2 课程总结&课后练习
tom睡着了
2019-11-06
commitTimer = time.AfterFunc(
time.Duration(1 * time.Second,
func(batch *common.JobLogBatch) func() /*function1*/ {
// function2
return func() {
logSink.autoCommitChan <- batch
}
}(jobLogBatch),
)
老师您好,这里没有搞懂代码的调用过程。我的理解是time.AfterFunc()会在1秒后,调用其内部方法,也就是function1,而function1返回值是function2,但function2在程序中并没有显式的调用,为什么function2中的代码会被执行?
写回答
2回答
-
tom睡着了
提问者
2019-11-08
哦!明白了,感谢老师。
00 -
小鱼儿老师
2019-11-08
同学好,第2个参数的阅读方式如下:
1)定义了一个匿名函数,其参数是(batch *common.LogBatch),返回值是一个无参数的func。
func(batch *common.LogBatch) func() {
}
2)这是相当于立即调用该匿名函数,传入参数是jobLogBatch。
func(batch *common.LogBatch) func() {
}(jobLogBatch)
3)完整连起来看,就是立即执行1个匿名函数,返回另外1个函数作为afterFunc的参数。
func(batch *common.LogBatch) func() {
return func() {
logSink.autoCommitChan <- batch
}
}(logBatch),
00