WaitGroup Not Completing in Go Concurrency
提供されたコードは、URL のリストから複数のファイルを同時にダウンロードして保存しようとします。ただし、sync.WaitGroup が完了しないため、メインの goroutine は終了しません。
特定された 2 つの問題:
最適化コード:
func downloadFromURL(url string, wg *sync.WaitGroup) error { defer wg.Done() // Moved to the beginning of the function ... // Other code } func main() { ... for _, url := range links { if isExcelDocument(url) { wg.Add(1) go downloadFromURL(url, &wg) // Pass pointer to WaitGroup } else { fmt.Printf("Skipping: %v \n", url) } } ... }
これらの問題に対処することで、WaitGroup は実行中のゴルーチンの数とメインのゴルーチンを正確に追跡できるようになります。すべてのダウンロードが完了すると終了します。
以上がファイルを同時にダウンロードすると Go WaitGroup が完了しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。