Course aux données dans le comportement de Goroutine
L'extrait de code fourni introduit un problème de course aux données qui peut conduire à des résultats imprévisibles. Le problème principal vient de la nature des Goroutines et de la manière dont la variable de plage est transmise à la fonction de la Goroutine.
La course aux données
Le code fourni utilise une plage boucle sur la tranche de données, et pour chaque itération, il démarre une nouvelle goroutine pour imprimer le champ de nom de la structure de champ. Cependant, au sein de chaque itération, la variable de plage v pointe vers la même structure de données sous-jacente dans la tranche de données, qui est une référence.
À mesure que la boucle progresse et que la variable v parcourt la tranche de données, sa valeur devient pointez vers l’élément suivant. Cela signifie qu'au moment où la fonction de la goroutine est exécutée, elle a la dernière valeur de v, qui est le dernier élément de la tranche.
Par conséquent, l'exécution des goroutines entraînera l'impression du champ de nom de seul le dernier élément, "trois", trois fois au lieu du "un", "deux", "trois" prévu dans n'importe quel order.
Solutions
Pour résoudre ce problème, plusieurs solutions sont disponibles :
Créer une nouvelle variable :
Utilisez une tranche de pointeurs :
Utilisez l'adresse de l'élément Slice :
Approches supplémentaires
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!