Go: měření doby provádění funkce

Znáte to, nechcete hned složitě debugovat, ale rádi byste věděli, jak dlouho něco ve vašem kódu trvá a chtěli byste, aby se to používalo co nejjednodušeji.

Pak možná třeba takto:

package main

import (
	"log"
	"time"
)

// Timer func for measuring the duration of the function
func Timer(name string) func() {
	st := time.Now()
	log.Println(name, "START")
	return func() {
		et := time.Now().Sub(st)
		log.Println(name, "DURATION", et)
	}
}

func doIt() {
	doItTimer := Timer("doIt()")
	defer doItTimer()

	time.Sleep(time.Duration(5 * time.Second))
}

func main() {
	mainTimer := Timer("main()")
	defer mainTimer()

	doIt()
}

Použití je z kódu jasné: měření odstartujete zavoláním funkce Timer, kter8 vám vrátí funkci pro ukončení měření s výpisem informace o spotřebovaném čase,

Výsledek pak bude vypadat následovně:

řešení je postavené na closures, což bude asi povědomé každému kdo píše v NodeJS.

PS

V Insideru mi přestal fungovat plugin pro získávání screenshotů s náhlady na zdrojový kód a nenašel jsem žádnou náhradu…

A tak jsem si znovu nainstaloval Atom. A byl jsem opravdu příjmně překvapenej. S Go funguje bezchybně.

A na 1. dobrou fungoval i plugin atom-screenshot a tady je výsledek:

To nevypadá vůbec špatně, že?