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

哦!明白了,感谢老师。

0
0

小鱼儿老师

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),    


0
0

Go语言开发分布式任务调度 轻松搞定高性能Crontab

分布式系统设计+高并发细节处理,一次性让你“晋级”到位

1136 学习 · 177 问题

查看课程