我正在呼叫以下函式
func main() {
defer func(t time.Time) {
log.Printf("took=%v", time.Since(t))
}(time.Now())
time.Sleep(5 * time.Second)
}
我注意到,正如預期的那樣,延遲函式報告了實際的整個執行時間。
? go run main.go
2022/01/08 15:20:03 took=5.005078652s
我的問題是允許這樣做的實際機制是什么?
這條線是否defer func(t time.Time)暗示在這個特定點呼叫實際上已經完成(因此t在這個時間點獲取時間值)并且這就是它可以估計實際 ( main) 函式呼叫的方式?
否則,如果延遲匿名函式在main' 存在之前被完全呼叫,它怎么知道main實際開始執行的時間?
uj5u.com熱心網友回復:
是的,這就是Go tour所說的:
延遲呼叫的引數會立即計算,但函式呼叫在周圍的函式回傳之前不會執行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/405666.html
標籤:
上一篇:UTF-8在Tomcat服務器中運行的Java應用程式中不起作用
下一篇:如何在構建時使用不同的組態檔?
