可以使用一个 goroutine pool 来处理不同的 url,每个 url 开启一个 goroutine。
可以使用 sync.WaitGroup 来等待所有 goroutine 完成任务。
示例代码如下:
func startQueryFileSize() {
// 创建一个 channel,用于传递需要查询文件大小的 url
fileSizeQueryChan := make(chan string)
// 创建 goroutine pool,使用 sync.WaitGroup 控制并发协程数量
const goroutineNum = 5
var wg sync.WaitGroup
for i := 0; i < goroutineNum; i++ {
wg.Add(1)
go func() {
defer wg.Done()
for url := range fileSizeQueryChan {
// 处理每个 url 的逻辑
}
}()
}
// 往 channel 中添加 url
urls := []string{"http://example.com", "http://google.com", "http://bing.com"}
for _, url := range urls {
fileSizeQueryChan <- url
}
// 关闭 channel,等待所有 goroutine 完成任务
close(fileSizeQueryChan)
wg.Wait()
}




