测量Go中给定代码块的执行时间包括两个步骤,需要在测量函数前后进行。在函数之前,你需要用以下方法记录当前的时间 time.Now().然后,在执行完被测量的代码块后,你可以用 time.Since()函数。
package main
import (
"log"
"time"
)
func main() {
start := time.Now()
time.Sleep(2 * time.Second)
log.Printf("main, execution time %s\n", time.Since(start))
}
输出。
2021/08/10 14:32:13 main, execution time 2.003051562s
你可以使用defer 语句将测量时间的过程缩短为单行代码。在下面的例子中,track 函数接收被测代码块的名称("main" ),并返回一个闭合函数,计算自调用track 以来所经过的时间。你只需要在代码块的末尾使用defer 语句来调用这个函数,该语句会推迟执行,直到当前的函数 ( 以下例子中的main() ) 返回。
package main
import (
"log"
"time"
)
func track(name string) func() {
start := time.Now()
return func() {
log.Printf("%s, execution time %s\n", name, time.Since(start))
}
}
func main() {
defer track("main")() // do not forget about the second parentheses
time.Sleep(2 * time.Second)
}
输出。
2021/08/10 14:32:39 main, execution time 2.004788787s