Dans le code que vous avez fourni, vous avez implémenté un mécanisme de délai d'attente à l'aide d'une instruction select pour gérer soit le résultat de la fonction findCicCode(), soit un délai d'attente. de 50 millisecondes. Cependant, vous avez exprimé des inquiétudes quant au risque de fuite de ressources si les appels HTTP continuent de s'exécuter même après l'expiration du délai.
Pour résoudre ce problème, vous pouvez exploiter le notion de contexte dans Go. Le contexte fournit un moyen d'associer des valeurs spécifiques au contexte aux goroutines et permet l'annulation. Avec le contexte, vous pouvez annuler les appels HTTP en cours lorsqu'un délai d'attente se produit.
Voici un exemple de la façon dont vous pouvez implémenter l'annulation du contexte pour les requêtes HTTP :
<code class="go">package main import ( "context" "fmt" "net/http" "time" ) type Response struct { data interface{} status bool } func Find() (interface{}, bool) { ch := make(chan Response, 1) ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() // Ensure cancelation when the function exits go func() { data, status := findCicCode(ctx) ch <- Response{data: data, status: status} }() select { case response := <-ch: return response.data, response.status case <-time.After(50 * time.Millisecond): return "Request timed out", false } } func main() { data, timedOut := Find() fmt.Println(data, timedOut) }</code>
Dans ce code modifié :
En utilisant cette approche, vous vous assurez que toutes les requêtes HTTP en cours sont annulées lorsque le délai d'attente est atteint, évitant ainsi une consommation inutile de ressources.
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!