Maison  >  Article  >  développement back-end  >  Pourquoi `input.Text()` est-il évalué dans la goroutine principale lors de la création d'une nouvelle goroutine avec `go` ?

Pourquoi `input.Text()` est-il évalué dans la goroutine principale lors de la création d'une nouvelle goroutine avec `go` ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-16 13:18:03832parcourir

Why is `input.Text()` evaluated in the main goroutine when creating a new goroutine with `go`?

Pourquoi input.Text() est évalué dans la goroutine principale

Lors de la création d'une nouvelle goroutine avec le mot-clé go, les paramètres et arguments de la fonction sont évalués à ce moment-là l'instruction go est exécutée, pas lorsque la goroutine commence réellement à s'exécuter. Cela signifie que toutes les variables ou expressions utilisées comme paramètres ou arguments seront évaluées dans la goroutine principale.

Dans l'exemple fourni, la fonction handleConn est appelée comme une goroutine avec le mot-clé go. La fonction prend un seul argument, c, qui fait référence à un objet net.Conn représentant une connexion réseau. À l'intérieur de la fonction handleConn, un bufio.Scanner est créé à l'aide de la connexion c, et la méthode Scan est appelée à plusieurs reprises sur le scanner pour lire l'entrée de la connexion.

Dans la boucle, la méthode Scan est appelée sur le scanner d'entrée et la ligne de texte lue à partir de la connexion est accessible à l'aide de la méthode Text. L'expression input.Text() est évaluée dans la goroutine principale et le texte est renvoyé à la goroutine handleConn à la suite de la méthode Scan.

Dans cet exemple particulier, la goroutine handleConn appelle à plusieurs reprises go echo( c, input.Text(), 1*time.Second) pour créer une nouvelle goroutine qui renvoie le texte saisi au client. Étant donné que input.Text() est évalué dans la goroutine principale, les valeurs de input.Text() et 1*time.Second sont déterminées au moment où l'instruction go est exécutée, et non lorsque la goroutine echo commence à s'exécuter.

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