Last Updated: February 25, 2016
·
4K
· mtchavez

Golang Time Function Wrapper

Wrote this quick and probably dirty wrapper for timing functions in Go. TimedReturn returns an interface{} in case a return value is needed from whatever you are wrapping.

package main

import (
  "fmt"
  "time"
)

type wrapped func()
type wrappedReturn func() interface{}

func Timed(fn wrapped, key string) {
  start := time.Now().Unix()
  fn()
  end := time.Now().Unix()
  fmt.Printf("Time: %d, Key: %s\n", end-start, key)
}

func TimedReturn(fn wrappedReturn, key string) interface{} {
  start := time.Now().Unix()
  resp := fn()
  end := time.Now().Unix()
  fmt.Printf("Time: %d, Key: %s]n", end-start, key)
  return resp
}

func main() {
  fn := func() {
    fmt.Println("Hello from wrapped function!")
    time.Sleep(time.Duration(1) * time.Second)
  }
  Timed(fn, "go.playground")

  fn2 := func() interface{} {
    fmt.Println("Hello from wrapped function with return!")
    time.Sleep(time.Duration(2) * time.Second)
    return []int{3}
  }
  returned := TimedReturn(fn2, "go.playground")
  fmt.Println("TimedReturn got:", returned.([]int))
}