首頁 > 後端開發 > Golang > 當使用 go 創建新的 goroutine 時,為什麼要在主 goroutine 中計算 input.Text() ?

當使用 go 創建新的 goroutine 時,為什麼要在主 goroutine 中計算 input.Text() ?

Mary-Kate Olsen
發布: 2024-11-16 13:18:03
原創
910 人瀏覽過

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

為什麼在主goroutine 中對input.Text() 進行求值

當使用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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板