我想下載文件並行地走,但我的代碼永遠不會退出:Golang併發下載僵局
package main
import (
"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 download multiple files in parallel using goroutines但我找不到解決方案。 調試此類代碼的最佳方式是什麼?
你讓你的'WaitGroup'複印件;你應該傳遞一個'download_file'指針給它。 –
Go有一些語法糖可以用指針接收器調用非指針值的方法,但是您應該真的考慮一下你傳遞的方法,並且方法調用總是會生成一個副本。 – Volker
此外,你忽略了錯誤。不要這樣做。 – peterSO