func fetch(url string, channel chan string, wg sync.WaitGroup) {
defer wg.Done()
resp, err := http.Get(url)
if (err != nil) || (resp.StatusCode != http.StatusOK) {
temp := fmt.Sprintf("Cannot fetch %s", url)
channel <- temp
fmt.Println("put one")
}
}
func preFetchAd(ad *Ad) error {
var wg sync.WaitGroup
count := 0
count = count + len(ad.Urls)
for _, urls := range ad.Urls2 {
count = count + len(urls)
}
c := make(chan string, count)
//fmt.Println(count)
errs := []string{}
for _, url := range ad.Urls {
wg.Add(1)
go fetch(url.L, c, wg)
}
for _, urls := range ad.Urls2 {
for _, url := range urls {
wg.Add(1)
go fetch(url.L, c, wg)
}
}
wg.Wait()
close(c)
for err := range c {
errs = append(errs, err)
}
if len(errs) == 0 {
return nil
}
e := strings.Join(errs, "\n")
return errors.New(e)
}
我先预算了个数,创建了足够缓存的 chan,但似乎依旧阻塞了?