Go: Measure execution time

Measure a piece of code

start := time.Now()
…Code to measure elapsed time of…
duration := time.Since(start)

// Formatted string, such as "2h3m0.5s" or "4.503μs"

// Nanoseconds as int64

Measure a function call

You can track the execution time of a complete function call with this one-liner, which logs the result to the standard error stream.

func foo() {
        defer duration(track("foo"))
        // Code to measure

The helper functions track and duration are defined as

func track(msg string) (string, time.Time) {
        return msg, time.Now()

func duration(msg string, start time.Time) {
        log.Printf("%v: %v\n", msg, time.Since(start))


The testing package has support for benchmarking that can be used to examine the performance of your code.


Be the first to comment!