透過正確等待Go 程式確保程式順利退出
使用Go 程式時,確保它們在退出程式之前完成至關重要。了解等待例程完成背後的機制,就可以有效地實現它。
揭開「
等待的關鍵Go 例程使用「
透過適當的同步避免死鎖
當您取消註解最後一行時,您會遇到死鎖,因為通道「done」已經被讀取一次。當兩個或多個例程嘗試取得彼此持有的資源時,就會發生死鎖,從而創建阻止它們繼續進行的依賴關係。為了避免這種情況,請確保例程和通道之間的正確同步。
在您想要並行化長時間運行的函數的情況下,「sync」套件提供了更強大的解決方案。 「sync.WaitGroup」類型可讓您追蹤活動例程的數量並等待它們完成後再繼續。下面的範例示範了這種方法:
package main import ( "fmt" "sync" "time" ) func main() { var wg sync.WaitGroup for i := 0; i < 10; i++ { wg.Add(1) go func() { longOp() wg.Done() }() } // Wait for all routines to finish wg.Wait() } func longOp() { time.Sleep(time.Second * 2) fmt.Println("Long operation completed") }
透過使用“sync.WaitGroup”,您可以確保您的程式在繼續之前等待所有長時間運行的函數完成,從而避免潛在的死鎖。這提供了一種更受控制的方法來協調 Go 例程。
以上是當所有 Goroutines 結束後,如何優雅地退出 Go 程式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!