Este dilema se puede abordar de diferentes maneras, por lo tanto te damos la que en nuestra opinión es la respuesta más completa.
Solución:
Si está cronometrando una función completa, entonces puede usar defer
para eliminar parte del código repetitivo.
func elapsed(what string) func()
start := time.Now()
return func()
fmt.Printf("%s took %vn", what, time.Since(start))
func main()
defer elapsed("page")() // <-- The trailing () is the deferred call
time.Sleep(time.Second * 2)
ejemplo de patio de recreo
La solución proporcionada por Cerise es perfecta.
Además, si no desea pasar el nombre de la función explícitamente, puede hacerlo así:
func SomeFunction(list *[]string)
defer TimeTrack(time.Now())
// Do whatever you want.
func TimeTrack(start time.Time)
elapsed := time.Since(start)
// Skip this function, and fetch the PC and file for its parent.
pc, _, _, _ := runtime.Caller(1)
// Retrieve a function object this functions parent.
funcObj := runtime.FuncForPC(pc)
// Regex to extract just the function name (and not the module path).
runtimeFunc := regexp.MustCompile(`^.*.(.*)$`)
name := runtimeFunc.ReplaceAllString(funcObj.Name(), "$1")
log.Println(fmt.Sprintf("%s took %s", name, elapsed))
Como resultado, obtendrías:
SomeFunction took 15.483µs
Para obtener más información, consulte este artículo: Seguimiento de la función Go
Comparte el conocimiento. 🙂
Usar la función de inicio
package main
import (
"fmt"
"time"
)
var start time.Time
func init()
start = time.Now()
func getChars(s string)
for _, c := range s
fmt.Printf("%c at time %vn", c, time.Since(start))
time.Sleep(10 * time.Millisecond)
func main()
fmt.Println("main execution started at time", time.Since(start))
getChars("Hello")
fmt.Println("nmain execution stopped at time", time.Since(start))
Sección de Reseñas y Valoraciones
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)