捕獲 Goroutine 的回傳值
與傳統的函數呼叫不同,goroutine 是非同步執行的。因此,嘗試將 Goroutine 的回傳值直接儲存在變數中(如程式碼片段所示)會導致編譯錯誤。
錯誤原因
此錯誤源自於非同步執行和立即值檢索的衝突性質。當將 goroutine 與 go 一起使用時,您可以指示程式非同步執行該函數,而無需等待其完成。然而,將返回值指派給變數需要該值立即可用。
通道:非同步值傳遞機制
為了規避此限制,通道服務作為 goroutine 之間價值交換的中介。通道允許您將值從一個 Goroutine 發送到另一個 Goroutine,從而在不破壞並發性的情況下實現非同步值檢索。
實現基於通道的方法(如下面的程式碼所示)可讓您從Goroutine 接收值,而不會影響其效能非同步性質:
訊息傳遞和CSP理論
Go 的訊息系統從CSP(Communicating Sequential Processes)理論中汲取靈感。這種方法促進訊息傳遞成為獨立進程之間的主要通訊機制。範例程式碼遵循 CSP 的原則,利用通道在 goroutine 之間進行非同步通訊。
以上是Go中如何取得非同步運行的Goroutine的回傳值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!