Maison > Article > développement back-end > Pourquoi la mesure du temps d'exécution avec Defer dans Go donne-t-elle toujours zéro ?
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) }
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)) }()
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!