Dans Go, lors du passage d'arguments à une fonction invoquée avec le mot-clé go, ces arguments sont évalués dans la goroutine principale. Cela signifie que toutes les variables passées en arguments sont évaluées immédiatement, plutôt que lorsque la fonction est exécutée dans la goroutine nouvellement créée.
Le code en question de "The Go Programming Language" explique que input.Text() est évalué dans la goroutine principale car il s'agit d'un argument de fonction transmis à la goroutine go echo(). En conséquence, l'entrée est lue et traitée dans la goroutine principale avant le démarrage de la goroutine echo().
func handleConn(c net.Conn) { input := bufio.NewScanner(c) for input.Scan() { go echo(c, input.Text(), 1*time.Second) } }
Dans l'exemple ci-dessus, input.Text() appelle la méthode Scan() sur le tampon d'entrée, qui lit et renvoie la ligne de texte suivante de la connexion. Puisqu'il s'agit d'un argument pour aller à echo(), il est évalué avant le démarrage de la goroutine, garantissant que la saisie de texte réelle est disponible pour la fonction echo().
Comprendre quand les arguments de fonction sont évalués est crucial pour la synchronisation et la cohérence des données dans les programmes basés sur goroutine. En évaluant les arguments dans la goroutine principale, Go garantit que les valeurs transmises aux goroutines sont à jour et thread-safe.
L'évaluation des arguments de fonction dans les goroutines aide à maintenir la cohérence et prévenir les conditions de course. En faisant en sorte que toutes les évaluations d'arguments se produisent dans la goroutine principale, Go élimine le risque d'utiliser des données obsolètes ou incohérentes dans des opérations simultané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!