input.Text() がメインのゴルーチンで評価されるのはなぜですか?
Go では、引数は関数と同時に呼び出されます。 go キーワードはすぐに評価されます。これは、関数が実際に実行されるときに引数の評価が行われる通常の関数呼び出しとは異なります。 echoServer の場合、引数 input.Text() は go ステートメントの実行時にメイン goroutine で評価されます。
即時評価の理由
ゴルーチンの関数引数を即時に評価することで、以下:
例の図
次の点を考慮してください例:
package main import ( "fmt" "time" ) func main() { i := 1 go func(i int) { fmt.Println(i) // => 1 i++ }(i) i++ }
go ステートメントの実行中に input.Text() の評価が発生した場合、即時評価のため i の値は 2 になります。ただし、ゴルーチンの実行中に評価された場合、変数 i はインクリメントされ、3 が出力されます。
結論
ゴルーチンの関数引数の即時評価これは Go の同時実行モデルの重要な側面です。これにより、同時実行プログラムの正確性、効率性、決定性が保証されます。
以上がgo ルーチンの開始前に input.Text() が評価されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。