1 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊
在所有調(diào)用完成之前,您main()不會(huì)阻塞,因此退出。go Crawl()您可以使用 async.WaitGroup或通道來(lái)同步程序,以完成所有 goroutine。
u我還發(fā)現(xiàn)goroutine 中使用的變量存在問題;當(dāng) goroutine 執(zhí)行時(shí),u范圍循環(huán)可能會(huì)或可能不會(huì)更改 的值。
結(jié)束Crawl可能會(huì)像這樣解決這兩個(gè)問題;
wg := sync.WaitGroup{}
fmt.Printf("found: %s %q\n", url, body)
for _, u := range urls {
cache.mux.Lock()
if _, ok := cache.cache[u]; !ok { //check if url already in cache
cache.mux.Unlock()
wg.Add(1)
go func(url string) {
Crawl(url, depth-1, fetcher)
wg.Done()
}(u)
} else {
cache.mux.Unlock()
}
}
// Block until all goroutines are done
wg.Wait()
return
- 1 回答
- 0 關(guān)注
- 113 瀏覽
添加回答
舉報(bào)