Comment mesurer le temps d'exécution d'une fonction dans Go
Lors du suivi des performances d'une fonction Go, il est courant d'utiliser l'instruction defer pour différer l'exécution d'une fonction jusqu'au retour de la fonction environnante. Cependant, dans certains cas, différer l'exécution d'une fonction pour imprimer son temps d'exécution peut entraîner une sortie inattendue de valeur nulle.
Considérez le code suivant :
func sum() { start := time.Now() //expecting to print 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) }
Dans cet exemple , l'instruction defer tente d'imprimer le temps écoulé depuis que la fonction a été initialement appelée. Cependant, comme les arguments de la fonction différée sont évalués au moment où la fonction est différée, l'appel time.Now() est effectué immédiatement lorsque start est attribué, ce qui entraîne une heure de début qui ne reflète pas le temps réel nécessaire à l'exécution de la fonction. fonction.
Pour résoudre ce problème, le code peut être modifié comme suit :
defer func() { fmt.Println(time.Now().Sub(start)) }()
En encapsulant l'appel fmt.Println dans une fonction anonyme, les arguments de la Les fonctions différées sont évaluées lorsque la fonction est exécutée, garantissant ainsi que l'heure de début est capturée correctement.
De plus, l'utilisation d'une fonction réutilisable pour encapsuler la logique de synchronisation peut simplifier davantage le code :
func timeFunction(f func()) { start := time.Now() f() fmt.Println(time.Now().Sub(start)) }
Cette fonction peut alors être utilisée comme suit :
timeFunction(func() { sum := 0 for i := 1; i < 101; i++ { sum += i } time.Sleep(1 * time.Second) fmt.Println(sum) })
En comprenant le fonctionnement des fonctions différées dans Go, les développeurs peuvent mesurer efficacement le temps d'exécution des fonctions et optimiser leur performance.
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!