golang代码插入/替换

时间:2017-03-25 09:05:17

标签: go go-templates

我不想让代码重复。但我有一种情况,当我必须在每个我想测量执行时间的函数中重复它时,我无能为力。 例如,函数:

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))

1 个答案:

答案 0 :(得分:1)

这个技巧可能会有所帮助:将一个函数的调用推迟到一个包含开始时间的函数。

func elapsed() func() {
    start := time.Now()
    return func() {
        fmt.Println("Duration was", time.Since(start))
    }
}

请按以下方式调用:

defer elapsed()()

Have a play

话虽如此,基准测试是衡量Go性能的常用方法。请参阅how to write benchmarks in Go