Impact de l'échec de l'annulation d'un contexte
Dans l'extrait de code fourni, un contexte avec un délai d'attente de 3 secondes est créé à l'aide du contexte. AvecTimeout. Ce contexte est destiné à être utilisé pour une requête HTTP effectuée par le http.DefaultClient. Pour garantir que les ressources associées au contexte sont libérées lorsque la requête se termine ou expire, l'instruction defer Cancel est utilisée.
Si l'instruction Defer Cancel était omise, le contexte et la goroutine qu'elle crée seraient divulgués. . Cela peut avoir des conséquences importantes :
Fuite de mémoire :
Dégradation des performances :
Comment éviter les fuites de contexte :
Pour éviter les fuites de contexte, appelez toujours Cancel lorsque vous avez terminé en utilisant le contexte. La bonne façon de procéder est d'utiliser l'instruction defer immédiatement après avoir appelé WithCancel ou WithTimeout :
ctx, cancel = context.WithTimeout(ctx, time.Duration(3) * time.Second) defer cancel()
En utilisant defer, la fonction d'annulation sera appelée automatiquement lorsque la fonction environnante se terminera, garantissant que le contexte et ses ressources associées sont libérées. Cette pratique garantit une bonne gestion de la mémoire et évite la dégradation des performances due à des fuites de contexte.
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!