每期一个小窍门: go中通过函数式编程, 将目标方法计时

在go中 我们可以通过fp来复用计时器函数

eg.

func Test01(t *testing.T) {
    
    
	m := timeSpend(targetMethod)(2)
	t.Log(m)
}

func targetMethod(a int) int {
    
    
	time.Sleep(time.Second * 3)
	return a
}

func timeSpend(inner func(i int) int) func(i int) int {
    
    
	return func(i int) int {
    
    
		start := time.Now()
		res := inner(i)
		duration := time.Since(start).Seconds()
		fmt.Print("duration: ", duration)
		return res
	}
}

这里也可以使用类型别名 这样看着舒服些

type intConv func(i int) int

func timeSpend(inner intConv) intConv {
    
    
	return func(i int) int {
    
    
		start := time.Now()
		res := inner(i)
		duration := time.Since(start).Seconds()
		fmt.Print("duration: ", duration)
		return res
	}
}

猜你喜欢

转载自blog.csdn.net/qq_33709508/article/details/132199898
今日推荐