Dans le code fourni, vous avez implémenté une fonction, Find(), qui utilise une goroutine (instruction go func()) pour récupération de données asynchrone à l'aide de findCicCode(). Vous avez défini un délai d'attente de 50 millisecondes pour recevoir la réponse de la goroutine.
Cependant, vous vous inquiétez des fuites potentielles de la goroutine si le délai d'attente est dépassé. De plus, vous aimeriez pouvoir annuler les requêtes HTTP effectuées par findCicCode() lorsque le délai d'attente se produit.
Prévention des fuites Goroutine
Pour gérer les fuites goroutine, il est essentiel pour garantir que toute goroutine créée dans une portée spécifique est terminée avant la fin de la portée. Dans ce cas, il est important d'annuler la goroutine dans l'instruction select lorsque le délai d'attente est atteint :
<code class="go">case <-time.After(50 * time.Millisecond): // Cancel the goroutine to prevent a potential leak close(ch) return "Request timed out", false</code>
Annulation de la demande HTTP
Pour annuler les requêtes HTTP dans la goroutine, vous pouvez exploiter le contexte.Context et context.CancelFunc fournis par la bibliothèque standard Go :
<code class="go">// Create a context with a timeout of 50 milliseconds ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond) defer cancel() // Execute the findCicCode() function within this context data, status := findCicCodeWithContext(ctx) // If the context is canceled (timeout), the HTTP requests will be aborted</code>
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!