使用golang来实现python的计时器

时间:2017-06-20 08:01:31

标签: python go timer

的Python:

with Timer() as t :
          // TODO a lot

print "scan all disks,cost:%s secs" % t.secs

现在,如何使用golang来实现这一目标?

我有谷歌这个,但我找不到任何我想要的答案。

为什么我会在这里发布我的问题然后进行投票?

谢谢你的帮助!!!

2 个答案:

答案 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