A tip in each issue: Time the target method through functional programming in go

In go, we can reuse timer functions through 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
	}
}

Here you can also use type aliases to look more comfortable

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

Guess you like

Origin blog.csdn.net/qq_33709508/article/details/132199898