首页 > 后端开发 > Golang > 为什么在 Go 中使用 Defer 测量执行时间总是产生零?

为什么在 Go 中使用 Defer 测量执行时间总是产生零?

Mary-Kate Olsen
发布: 2024-11-17 16:37:01
原创
419 人浏览过

Why Does Measuring Execution Time with Defer in Go Always Yield Zero?

测量 Go 中的执行时间:解决 Defer 之谜

Defer 语句在执行关联函数之前等待函数完成。但是,使用 defer 打印以下函数的执行时间始终为零:

func sum() {
    start := time.Now()

    // Expected 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 在包含函数延迟时计算延迟函数的参数。因此,在循环或睡眠之前立即评估 start。

解决方案:
要准确测量经过的时间,请在延迟函数内评估 time.Now():

defer func() { fmt.Println(time.Now().Sub(start)) }()
登录后复制

这样做可以在延迟函数执行时计算时间差,确保结果准确。

提示:考虑使用可重用的函数来封装时序逻辑测量更简单、更一致。

以上是为什么在 Go 中使用 Defer 测量执行时间总是产生零?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板