Heim >Backend-Entwicklung >Golang >Warum wird „input.Text()' in der Haupt-Goroutine ausgewertet, wenn mit „go' eine neue Goroutine erstellt wird?
Beim Erstellen einer neuen Goroutine mit dem Schlüsselwort go werden die Parameter und Argumente der Funktion zu diesem Zeitpunkt ausgewertet Die go-Anweisung wird ausgeführt, nicht wenn die Goroutine tatsächlich ausgeführt wird. Das bedeutet, dass alle Variablen oder Ausdrücke, die als Parameter oder Argumente verwendet werden, in der Haupt-Goroutine ausgewertet werden.
Im bereitgestellten Beispiel wird die Funktion handleConn als Goroutine mit dem Schlüsselwort go aufgerufen. Die Funktion benötigt ein einzelnes Argument, c, das auf ein net.Conn-Objekt verweist, das eine Netzwerkverbindung darstellt. Innerhalb der handleConn-Funktion wird ein bufio.Scanner mithilfe der c-Verbindung erstellt und die Scan-Methode wird wiederholt auf dem Scanner aufgerufen, um Eingaben von der Verbindung zu lesen.
Innerhalb der Schleife wird die Scan-Methode auf aufgerufen Der Eingabescanner wird verwendet, und auf die aus der Verbindung gelesene Textzeile wird mithilfe der Textmethode zugegriffen. Der Ausdruck input.Text() wird innerhalb der Haupt-Goroutine ausgewertet und der Text wird als Ergebnis der Scan-Methode an die handleConn-Goroutine zurückgegeben.
In diesem speziellen Beispiel ruft die handleConn-Goroutine wiederholt go echo( c, input.Text(), 1*time.Second), um eine neue Goroutine zu erstellen, die den Eingabetext an den Client zurückgibt. Da input.Text() in der Haupt-Goroutine ausgewertet wird, werden die Werte für input.Text() und 1*time.Second zum Zeitpunkt der Ausführung der go-Anweisung bestimmt, nicht zu Beginn der Ausführung der Echo-Goroutine.
Das obige ist der detaillierte Inhalt vonWarum wird „input.Text()' in der Haupt-Goroutine ausgewertet, wenn mit „go' eine neue Goroutine erstellt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!