如何暫停當前 Goroutine 的執行?


作為一名 Go 開發人員,您可能需要在某些時候暫停 Goroutine 的執行。暫停 Goroutine 在某些場景中非常有用,例如等待使用者輸入、等待伺服器響應或防止競爭條件。

在本文中,我們將探討在 Go 中暫停當前 Goroutine 執行的各種方法。

方法 1:使用 time.Sleep()

暫停 Goroutine 執行最簡單的方法是使用 time.Sleep() 函式。此函式以持續時間作為引數,並在給定持續時間內暫停 Goroutine 的執行。

示例

以下是一個示例 -

package main

import (
   "fmt"
   "time"
)

func main() {
   fmt.Println("Start")
   time.Sleep(5 * time.Second)
   fmt.Println("End")
}

輸出

Start
End

方法 2:使用 sync.WaitGroup

暫停 Goroutine 執行的另一種方法是使用 sync.WaitGroup。當您希望在繼續執行之前等待一組 Goroutine 完成執行時,此方法非常有用。

示例

以下是一個示例 -

package main

import (
   "sync"
)

func main() {
   var wg sync.WaitGroup
   wg.Add(1)

   go func() {
      defer wg.Done()
      // Do some work
   }()

   wg.Wait()
   // Continue after all Goroutines finish their execution
}

在上面的示例中,主 Goroutine 使用 wg.Wait() 方法等待匿名函式內的 Goroutine 完成其執行。

方法 3:使用通道

通道也可用於暫停 Goroutine 的執行。您可以向通道傳送一個值,並在 Goroutine 接收該值之前等待,然後繼續執行。

示例

以下是一個示例 -

package main

import (
   "fmt"
)
   
func main() {
   c := make(chan bool)
   
   go func() {
      // Do some work
      c <- true
   }()
   
   <-c // Wait for the Goroutine to send the value
   // Continue after the Goroutine sends the value
   fmt.Println("Goroutine finished")
}

在上面的示例中,主 Goroutine 等待匿名函式內的 Goroutine 從通道接收值,然後繼續執行。

輸出

Goroutine finished

結論

暫停當前 Goroutine 的執行在各種場景中都很有幫助。在本文中,我們探討了三種不同的暫停 Goroutine 執行的方法,包括使用 time.Sleep()、sync.WaitGroup 和通道。每種方法都有其優缺點,您應該選擇最適合您的用例的方法。

更新於: 2023年4月25日

1K+ 閱讀量

啟動您的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.