WaitGroup 在 Go 並發中未完成 提供的程式碼嘗試從 URL 清單中同時下載和儲存多個檔案。然而,主 goroutine 永遠不會終止,因為sync.WaitGroup永遠不會完成。 已識別的兩個問題: 同步問題:在downloadFromURL() 中,應該呼叫wg. Done() 呼叫作為第一個語句,而不是在函數的末尾。這確保即使函數提前返回,WaitGroup 也會正確遞減。 並發指標:downloadFromURL() 函數應該接收一個指向sync.WaitGroup 的指標來操作共享正確地反對。否則,按值傳遞 WaitGroup 會建立一個副本,對副本所做的變更將不會反映在主 Goroutine 中。 最佳化程式碼: 透過解決這些問題,WaitGroup 將準確追蹤正在運行的goroutine 數量,一旦所有下載完成,主goroutine 將終止完成。