Nice snippet from Stathat:
func timeTrack(start time.Time, name string) {
elapsed := time.Since(start)
log.Printf("%s took %s\n", name, elapsed)
}
func tracked() {
defer timeTrack(time.Now(), "main")
// do stuff
}
Full implementation:
package main
import (
"fmt"
"strings"
"time"
)
func timeTrack(start time.Time, name string) {
elapsed := time.Since(start)
fmt.Printf("%s took %s\n", name, elapsed)
}
func main() {
trackMe()
}
func trackMe() {
defer timeTrack(time.Now(), "main")
longstr := strings.Repeat("beef", 9999999)
fmt.Println(len(reverse(longstr)))
}
func reverse(s string) string {
r := []rune(s)
for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
r[i], r[j] = r[j], r[i]
}
return string(r)
}
Don't defer
in time critical hot paths.