的Python:
with Timer() as t :
// TODO a lot
print "scan all disks,cost:%s secs" % t.secs
现在,如何使用golang
来实现这一目标?
我有谷歌这个,但我找不到任何我想要的答案。
为什么我会在这里发布我的问题然后进行投票?
谢谢你的帮助!!!
答案 0 :(得分:4)
您可以编写一个接受函数的函数,运行它并打印时间:
import (
"time"
"fmt"
)
func TimeIt(f func(), description string) {
start := time.Now()
f()
fmt.Printf("Running %s took %v\n", description, time.Since(start))
}
然后像这样触发它:
func main() {
TimeIt(doSomething, "Doing something")
}
或者只是把它作为一个封条撒在代码片上:
TimeIt(func() {
do()
some()
stuff()
},
"whatever")
答案 1 :(得分:3)
在go中执行此操作的另一种方法是定义一个计时器函数,并在函数返回时使用defer语句来调用它。
package main
import (
"fmt"
"time"
)
func timer(start time.Time, description string) {
fmt.Printf("%s took %s\n", description, time.Since(start))
}
func main() {
func() {
defer timer(time.Now(), "scan all disks")
// TODO: alot
}()
// OUTPUT: scan all disks took 0s
}
您可以通过将特定命令包装到匿名函数中来测量特定命令的时间(参见上文),或者通过简单地将defer语句放在其顶部来测量函数的时间,例如
func foo() {
defer timer(time.Now(), "foo")
// ...
}
// OUTPUT: foo took 0s