Dans le code fourni, l'intention est que la goroutine principale imprime les nombres de 1 à 11 en utilisant un canal et un groupe d'attente. Cependant, il saute parfois le numéro 11, ce qui entraîne une sortie incomplète.
Le problème provient d'une connexion incorrecte de sync.WaitGroup à la fonction externe, Print. En transmettant une copie de WaitGroup à la fonction, elle ne peut pas effectuer l'appel Done() nécessaire sur le groupe d'attente d'origine attendu par la goroutine principale.
Meilleure solution :
La solution recommandée consiste à modifier le code comme suit :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
Dans ce correctif, la fonction Print reçoit un pointeur vers le groupe d'attente, garantissant que sa méthode Done() est appelée dans le fonction, permettant ainsi à la goroutine principale de procéder correctement.
Solution alternative :
Alternativement, on peut éliminer le besoin de WaitGroup dans la fonction d'impression en fermant directement le canal après avoir envoyé tous les numéros :
1 2 3 4 5 |
|
Dans ce cas, la goroutine principale doit plutôt attendre la fermeture de la chaîne :
1 2 |
|
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!