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,但似乎依旧阻塞了?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.