获取在Go中执行函数所需的时间

获取在Go中执行函数所需的时间,go,Go,DEBER语句延迟函数的执行,直到周围的函数返回。 但是,如果我尝试打印执行以下函数所花费的时间,它总是打印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++ {

DEBER语句延迟函数的执行,直到周围的函数返回。 但是,如果我尝试打印执行以下函数所花费的时间,它总是打印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)) }()
此处使用的计时逻辑可以放在可重用函数中:

// timer returns a function that logs message and the elapsed time from
// the call to timer and the returned function. The returned function is
// intended to be used in a defer statement:
//   defer timer("sum")()
func timer(message string) func() {
    start := time.Now()
    return func() { fmt.Println(message, time.Since(start)) }
}

func sum() {
    defer timer("sum")()

    sum := 0
    for i := 1; i < 101; i++ {
        sum += i
    }
    time.Sleep(1 * time.Second)
    fmt.Println(sum)
}
本教程将介绍这一点:将立即计算延迟调用的参数