Im Kapitel 8 von The Go Programming Language steht die folgende Aussage gemacht über den Concurrency-Echo-Server:
Die Argumente der von go gestarteten Funktion werden ausgewertet, wenn die go-Anweisung selbst ausgeführt wird; Daher wird input.Text() in der Haupt-Goroutine ausgewertet.
Diese Anweisung bedeutet, dass bei Ausführung der go-Anweisung die Funktion input.Text() sofort ausgewertet wird und ihr Ergebnis an das go-Echo übergeben wird () goroutine. Dies steht im Gegensatz zu einem regulären Funktionsaufruf, bei dem die Funktionsargumente ausgewertet werden, wenn die Funktion aufgerufen wird, und die Ergebnisse an die aufgerufene Funktion übergeben werden.
Der Grund für diesen Unterschied ist, dass go-Anweisungen eine neue beginnen Goroutine und Goroutinen werden gleichzeitig mit der Haupt-Goroutine ausgeführt. Wenn die Argumente der von go gestarteten Funktion beim Aufruf der Funktion ausgewertet würden, müsste die Haupt-Goroutine warten, bis die Funktion abgeschlossen ist, bevor sie die neue Goroutine startet. Dies würde den Zweck der Verwendung von Goroutinen zunichte machen, der darin besteht, Parallelität zu ermöglichen.
Durch die Auswertung der Argumente für die von go gestartete Funktion, wenn die go-Anweisung selbst ausgeführt wird, muss die Haupt-Goroutine nicht auf die Funktion warten zu vervollständigen. Dadurch können die Goroutinen gleichzeitig gestartet werden, was das gewünschte Verhalten ist.
Das obige ist der detaillierte Inhalt vonWarum wird „input.Text()' in der Haupt-Goroutine ausgewertet, wenn „go'-Anweisungen verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!