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中文网其他相关文章!