我不想让代码重复。但我有一种情况,当我必须在每个我想测量执行时间的函数中重复它时,我无能为力。 例如,函数:
func someFunc() {
start_time := time.Now()
defer fmt.Println("Execution time: %v", time.Now().Sub(start_time))
<... doing some bussiness ...>
}
现在我必须在每个函数中重复这两个第一个笔画(原来它们因为调用函数名而更复杂)。所以我不能做一个测量时间的函数,因为我必须在它内部使用延迟。我甚至不能为第二个笔划创建一个函数,原因是它在Println中调用一个函数名称,这就是为什么结果名称不是所需的函数。 是否有任何方法可以通过某些标签或模板插入此代码,例如:
func someFunc() {
//go-insert measuretime.tmpl
<... doing some bussiness ...>
}
而且measuretime.tmpl是:
start_time := time.Now()
defer fmt.Println("Execution time: %v", time.Now().Sub(start_time))
答案 0 :(得分:1)
这个技巧可能会有所帮助:将一个函数的调用推迟到一个包含开始时间的函数。
func elapsed() func() {
start := time.Now()
return func() {
fmt.Println("Duration was", time.Since(start))
}
}
请按以下方式调用:
defer elapsed()()
话虽如此,基准测试是衡量Go性能的常用方法。请参阅how to write benchmarks in Go。