Maison > développement back-end > Golang > Pourquoi la mesure du temps d'exécution avec Defer dans Go donne-t-elle toujours zéro ?

Pourquoi la mesure du temps d'exécution avec Defer dans Go donne-t-elle toujours zéro ?

Mary-Kate Olsen
Libérer: 2024-11-17 16:37:01
original
434 Les gens l'ont consulté

Why Does Measuring Execution Time with Defer in Go Always Yield Zero?

Mesurer le temps d'exécution en Go : résoudre le mystère du report

Les instructions Defer attendent l'achèvement d'une fonction avant d'exécuter leurs fonctions associées. Cependant, l'impression du temps d'exécution de la fonction suivante à l'aide de defer donne toujours zéro :

func sum() {
    start := time.Now()

    // Expected non-zero value, but always gets 0
    defer fmt.Println(time.Now().Sub(start))

    sum := 0
    for i := 1; i < 101; i++ {
        sum += i
    }
    time.Sleep(1 * time.Second)
    fmt.Println(sum)
}
Copier après la connexion

Problème :
defer évalue les arguments de la fonction différée lorsque la fonction contenant les diffère . Par conséquent, le démarrage est évalué immédiatement, avant la boucle ou le sommeil.

Solution :
Pour mesurer le temps écoulé avec précision, évaluez time.Now() à l'intérieur de la fonction différée :

defer func() { fmt.Println(time.Now().Sub(start)) }()
Copier après la connexion

Ce faisant, la différence de temps est calculée lorsque la fonction différée s'exécute, garantissant ainsi une précision résultats.

Conseil : Pensez à utiliser une fonction réutilisable pour encapsuler la logique de synchronisation pour une mesure plus facile et plus cohérente.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal