// Created on savesnippets.com · https://savesnippets.com/ge2BqFSlpriaNS package main import ( "fmt" "log" "time" ) // Decorator pattern: log how long a function took func timeIt(name string) func() { start := time.Now() return func() { log.Printf("%s took %s", name, time.Since(start)) } } func slowOperation() { defer timeIt("slowOperation")() // note the double () — invokes returned func time.Sleep(150 * time.Millisecond) } func main() { slowOperation() // slowOperation took 150.3ms // One-liner inline start := time.Now() sum := 0 for i := 0; i < 1_000_000; i++ { sum += i } fmt.Printf("sum=%d in %s\n", sum, time.Since(start)) }