2 回答

TA贡献1859条经验 获得超6个赞
您可以进行一长串方法调用,但只有最后一个函数调用将被延迟,所有其他调用将立即使用该语句进行计算。deferdefer
func foo() {
defer A().B().C().D().E().F().G().H()
// Only call to H() is deferred and all other function calls must be
// evaluated immediately to reach H.
}
有关详细信息,请参阅有效 Go。

TA贡献1821条经验 获得超5个赞
级联函数中的延迟仅延迟到最后一个函数调用。其他函数将根据评估顺序立即调用。
例如
func secondInteration(p *profile){
fmt.Println("~~~~~~~~~~ Second Iteration ~~~~~~~~")
defer p.start().stop()
p.intermediate()
}
这只会延迟停止功能。开始和中间将作为正常执行进行评估。
上面的代码段将打印
~~~~~~~~~~ Second Iteration ~~~~~~~~
start
Intermediate
stop
而如果您有多个延迟函数,则这些函数将被推送到堆栈中,最后推送的延迟函数将首先被计算
例如
func thirdInteration(p *profile){
fmt.Println("~~~~~~~~~~ Third Iteration ~~~~~~~~")
defer p.start()
defer p.intermediate()
defer p.stop()
}
此输出到
~~~~~~~~~~ Third Iteration ~~~~~~~~
stop
Intermediate
start
因此,实际上,上面的代码片段在此上下文中是相同的,因为只有一个方法被链接,并且我们有一行代码。
我们可以在Go博客上找到更多信息。
上面的代码片段可以在这里找到
- 2 回答
- 0 关注
- 107 浏览
添加回答
举报