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
Libérer: 2024-10-29 21:17:02
original
758 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal