文件格式为
http://www.host.com/AAA001.dat
http://www.host.com/AAA002.dat
...
http://www.host.com/BBB001.dat
http://www.host.com/BBB002.dat
文件为AAA、BBB、CCC开头,后面为递增数字,数量未知。
希望能3线程下载,不清楚如何实现,是否要每个下载都启动一个新的goroutine来处理?
<a href="/user/stevewang" title="@stevewang">@stevewang</a>
非常感谢,确实达到了我想要的效果。初学Go,能遇到热心人是我的幸运,再次感谢。
#12
更多评论
用channel配合生产者/消费者模式,就可以控制下载的gorountine数目。
大致流程如下:
```
const (
ThreadCount = 3
)
func main() {
ch := make(chan string, ThreadCount)
var wg sync.WaitGroup
for i := 0; i < ThreadCount; i++ {
wg.Add(1)
go func() {
for url := range ch {
download(url)
}
wg.Done()
}()
}
urls := []string{
"http://www.host.com/AAA001.dat",
"http://www.host.com/AAA002.dat",
//...
}
// 分派下载任务
for _, url := range urls {
ch <- url
}
close(ch)
wg.Wait()
}
```
#1
多谢解答。但是下载数量未知如何解决呢?比如AAA是到了AAA247.dat,但是预先不知道数量,只有尝试AAA247.dat下载失败才知道需要结束,其它BBB、CCC也是如此。
#2