Lorsque vous travaillez avec des goroutines, il est essentiel de prendre en compte les délais d'attente et la gestion des goroutines. L'extrait de code suivant illustre une fonction qui intègre un délai d'expiration combiné pour plusieurs appels HTTP :
<code class="go">func Find() (interface{}, bool) { ch := make(chan Response, 1) go func() { data, status := findCicCode() 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 } }</code>
Bien que cette approche fournisse un moyen de gérer les délais d'attente, il est à craindre que les appels HTTP puissent continuer en arrière-plan même après l'expiration du délai d'attente. le délai d'attente est expiré. Pour résoudre ce problème, envisagez d'utiliser un contexte, qui fournit un contrôle granulaire sur l'annulation :
<code class="go">// create a timeout or cancelation context to suit your requirements ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() req, err := http.NewRequest("GET", location, nil) // add the context to each request and they will be canceled in unison resp, err := http.Do(req.WithContext(ctx))</code>
En incorporant un contexte, vous pouvez annuler les requêtes HTTP de manière uniforme, en garantissant qu'elles ne restent pas exécutées en arrière-plan. Cette technique permet d'éviter les fuites de goroutines et de maintenir l'intégrité du 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!