Golang 使用 Goroutines 並行下載多個檔案
是否可以使用 Goroutines 並行下載和儲存檔案?為了演示,讓我們深入研究一下用 Golang 編寫的程式碼片段。
<code class="go">import ( "encoding/json" "fmt" "io" "io/ioutil" "net/http" "net/url" "os" "path/filepath" "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() } ... func download_file(file File, token TokenResponse, wg *sync.WaitGroup) { ... wg.Done() }</code>
理解解決方案:
出現這個問題是因為主 goroutine 在所有 goroutine 之前退出。產生 goroutine 來完成下載檔案。為了糾正這個問題,引入了sync.WaitGroup來追蹤正在運行的goroutines的數量。在主 Goroutine 退出之前,它會等待所有 Goroutine(同時運行)完成。
在每個 Goroutine 中,wg.Add 方法會增加計數,表示建立了一個新的 Goroutine。成功下載檔案後,呼叫 wg.Done 方法,減少計數並發出 goroutine 完成的訊號。
一旦所有 goroutine 完成,主 goroutine 中的 wg.Wait() 方法就會解鎖並允許主程式繼續進行。
以上是以下是根據您提供的文章提供的一些標題選項,重點關注問答格式,同時突出顯示 goroutine 和平行文件下載: **選項 1(關注 Goroutine):**的詳細內容。更多資訊請關注PHP中文網其他相關文章!