戈朗代码插入/替换



我喜欢不允许代码重复。但是我有一种情况,当我必须在每个函数中重复它时,我想测量执行时间,而我对此无能为力。例如,一个函数:

func someFunc() {
    start_time := time.Now()
    defer fmt.Println("Execution time: %v", time.Now().Sub(start_time))
    <... doing some bussiness ...>
}

现在我必须在每个函数中重复这两个前笔画(在原始函数中,由于调用函数名称,它们更复杂(。所以我不能做一个测量时间的函数,因为我必须在里面使用 defer。即使是第二笔画,我也无法制作函数,因为原始情况下它在 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))

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

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

按如下方式调用它:

defer elapsed()()

玩一玩

话虽如此,基准测试是衡量 Go 性能的常用方法。了解如何在 Go 中编写基准测试。

最新更新