Maison >développement back-end >Golang >Comment prévenir les fuites de Goroutine et gérer efficacement les délais d'attente dans Go ?

Comment prévenir les fuites de Goroutine et gérer efficacement les délais d'attente dans Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-29 21:17:02803parcourir

How to Prevent Goroutine Leaks and Manage Timeouts Effectively in Go?

Gestion des délais d'attente et des fuites de goroutines dans Go

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn