我想在 go 中并行下载文件,但我的代码永远不会退出:package mainimport ( "fmt" "io" "net/http" "os" "path/filepath" "sync")func download_file(file_path string, wg sync.WaitGroup) { defer wg.Done() resp, _ := http.Get(file_path) defer resp.Body.Close() filename := filepath.Base(file_path) file, _ := os.Create(filename) defer file.Close() size, _ := io.Copy(file, resp.Body) fmt.Println(filename, size, resp.Status)}func main() { var wg sync.WaitGroup file_list := []string{ "http://i.imgur.com/dxGb2uZ.jpg", "http://i.imgur.com/RSU6NxX.jpg", "http://i.imgur.com/hUWgS2S.jpg", "http://i.imgur.com/U8kaix0.jpg", "http://i.imgur.com/w3cEYpY.jpg", "http://i.imgur.com/ooSCD9T.jpg"} fmt.Println(len(file_list)) for _, url := range file_list { wg.Add(1) fmt.Println(wg) go download_file(url, wg) } wg.Wait()}什么原因?我在这里查看:Golang 使用 goroutines 并行下载多个文件,但我没有找到解决方案。调试此类代码的最佳方法是什么?
2 回答
Qyouu
TA贡献1786条经验 获得超11个赞
添加到 Calab 的响应中,您的方法绝对没有错,您所要做的就是将指针传递给sync.WaitGroup.
func download_file(file_path string, wg *sync.WaitGroup) {
defer wg.Done()
......
}
.....
go download_file(url, &wg)
.....
playground
- 2 回答
- 0 关注
- 183 浏览
添加回答
举报
0/150
提交
取消