defer 语句推迟函数的执行,直到周围的函数返回。 但是,如果我尝试打印执行以下函数所花费的时间,它总是打印 0。
func sum() {
start := time.Now()
//expecting to print non zero value but always gets 0
defer fmt.Println(time.Now().Sub(start))
sum := 0
for i := 1; i < 101; i++ {
sum += i
}
time.Sleep(1 * time.Second)
fmt.Println(sum)
}
最佳答案
延迟函数的参数在函数被延迟时被计算。使用以下代码按预期评估耗时:
defer func() { fmt.Println(time.Now().Sub(start)) }()
安answer to a related question描述了如何将时序逻辑封装在一个可重用的函数中。
关于go - 获取在 Go 中执行函数所花费的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54451865/