Skip to content

Instantly share code, notes, and snippets.

@denisbrodbeck
Created September 25, 2017 11:32
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save denisbrodbeck/6f5813681dfe049b1e5392f978738833 to your computer and use it in GitHub Desktop.
Save denisbrodbeck/6f5813681dfe049b1e5392f978738833 to your computer and use it in GitHub Desktop.
How to measure execution time of functions in golang

How to measure execution time of functions in golang

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment