Maison >développement back-end >Golang >Voici quelques titres basés sur des questions qui correspondent au texte fourni : * **Go WaitGroup et Channels : pourquoi mon programme ne se ferme-t-il pas ?** * ** Coincé dans une boucle : comment fermer correctement les chaînes en Go avec WaitGro

Voici quelques titres basés sur des questions qui correspondent au texte fourni : * **Go WaitGroup et Channels : pourquoi mon programme ne se ferme-t-il pas ?** * ** Coincé dans une boucle : comment fermer correctement les chaînes en Go avec WaitGro

DDD
DDDoriginal
2024-10-26 11:33:03294parcourir

Here are a few question-based titles that fit your provided text:

* **Go WaitGroup and Channels: Why Does My Program Not Exit?**
* **Stuck in a Loop: How to Properly Close Channels in Go with WaitGroup**
* **Channel Not Closed, Program Stalled: Debugging

Canal non fermé, programme bloqué

Dans votre application Go utilisant sync.WaitGroup et les canaux, vous avez rencontré un problème où le programme ne se termine pas même après avoir attendu la fin de toutes les goroutines.

Détails du problème

Votre code utilise un WaitGroup pour suivre l'achèvement des goroutines et un canal pour transmettre les noms de symboles récupérés . Cependant, le canal fetchedSymbols reste ouvert indéfiniment, empêchant la boucle principale de se terminer.

Solution

  1. Fermeture du canal de signal avec WaitGroup : Utilisez le WaitGroup utilisé pour suivre l'achèvement de la goroutine pour signaler quand fermer le canal. Introduisez une goroutine qui attend que WaitGroup atteigne zéro, puis ferme le canal.
<code class="go">go func() {
    wg.Wait()
    close(fetchedSymbols)
}()</code>
  1. Supprimer le blocage inutile : La boucle de plage sur les symboles récupérés se bloque déjà jusqu'à ce que le Le canal est fermé, ce qui rend tout canal supplémentaire ou WaitGroup redondant. Par conséquent, supprimez le code suivant :
<code class="go">for {
    select {
    case symbol := <-fetchedSymbols:
        fmt.Println("fetched", symbol)
    }
}</code>
  1. Fermer les reports : N'oubliez pas de fermer les reports dans la goroutine fetchSymbol pour vous assurer que les requêtes et les écritures de fichiers sont finalisées avant de quitter .

Avec ces modifications, votre code se fermera désormais correctement une fois que toutes les citations de symboles auront été récupérées et stockées.

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