在链式方法调用中使用`defer`会发生什么?
例如,
defer profile.Start().Stop()
是否等于:
p := profile.Start()
defer p.Stop()
回答
您可以defer使用一长串方法调用,但只有最后一个函数调用会被推迟,所有其他调用将立即使用该defer语句进行评估。
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.
}
有关更多信息,请参阅Effective Go。