在Golang 中使用Goroutine 並行下載多個檔案
在本文中,我們將探討如何利用Golang 中的Goroutine 來下載多個檔案
考慮以下程式碼片段,它嘗試從Dropbox 下載檔案:
<code class="go">package main import ( "encoding/json" "fmt" "io" "io/ioutil" "net/http" "net/url" "os" "path/filepath" "sync" ) ... func main() { ... for i, file := range flr.FileList { go download_file(file, tr) if i >= 2 { break } } ... }</code>
但是,在嘗試使用goroutine 執行此程式碼時,它會失敗。這是因為主協程在負責下載檔案的協程完成任務之前就退出了。
為了解決這個問題並確保主協程在退出之前等待協程完成,我們可以使用同步。 WaitGroup,如下:
<code class="go">package main import ( ... "sync" ) ... func main() { ... var wg sync.WaitGroup for i, file := range flr.FileList { wg.Add(1) go download_file(file, tr, &wg) if i >= 2 { break } } wg.Wait() ... }</code>
這裡,我們建立一個sync.WaitGroup並用它來追蹤尚未完成任務的goroutines的數量。這允許主 goroutine 等到所有 goroutine 完成任務後再退出。
在修改後的 download_file 函數中,我們呼叫 wg.Done() 表示 goroutine 已完成,同時減少 wg 計數器。
透過利用 goroutine 和 Waitgroup,我們可以有效地同時下載多個文件,提高下載過程的整體效率。
以上是Golang中如何使用Goroutines和WaitGroups同時下載多個檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!