Saltar al contenido

¿Existe una forma eficiente de calcular el tiempo de ejecución en golang?

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)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *