當使用go 關鍵字創建新的goroutine 時,函數的形參和參數會同時求值go 語句是在goroutine 實際開始運作時執行的。這意味著用作參數或自變數的任何變數或表達式都將在主 goroutine 中求值。
在提供的範例中,函數 handleConn 被當作帶有 go 關鍵字的 goroutine 呼叫。此函數採用單一參數 c,它引用表示網路連接的 net.Conn 物件。在handleConn函數內部,使用c連接建立了一個bufio.Scanner,並在掃描器上重複呼叫Scan方法以讀取連接中的輸入。
在循環內,在掃描器上呼叫Scan方法輸入掃描儀,並使用 Text 方法存取從連接讀取的文字行。 input.Text() 表達式在主 Goroutine 中進行計算,文字作為 Scan 方法的結果傳回 handleConn Goroutine。
在這個特定的範例中,handleConn Goroutine 重複呼叫 go echo( c, input.Text(), 1*time.Second) 建立一個新的 goroutine,將輸入文字回顯給客戶端。因為 input.Text() 是在主 goroutine 中計算的,所以 input.Text() 和 1*time.Second 的值是在執行 go 語句時確定的,而不是在 echo goroutine 開始運行時確定的。
以上是當使用 go 創建新的 goroutine 時,為什麼要在主 goroutine 中計算 input.Text() ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!