我想在 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 并行下載多個文件,但我沒有找到解決方案。調(diào)試此類代碼的最佳方法是什么?
2 回答

Qyouu
TA貢獻1786條經(jīng)驗 獲得超11個贊
添加到 Calab 的響應(yīng)中,您的方法絕對沒有錯,您所要做的就是將指針傳遞給sync.WaitGroup.
func download_file(file_path string, wg *sync.WaitGroup) {
defer wg.Done()
......
}
.....
go download_file(url, &wg)
.....
playground
- 2 回答
- 0 關(guān)注
- 202 瀏覽
添加回答
舉報
0/150
提交
取消