1 回答

TA貢獻1848條經(jīng)驗 獲得超2個贊
在所有調(diào)用完成之前,您main()不會阻塞,因此退出。go Crawl()您可以使用 async.WaitGroup或通道來同步程序,以完成所有 goroutine。
u我還發(fā)現(xiàn)goroutine 中使用的變量存在問題;當 goroutine 執(zhí)行時,u范圍循環(huán)可能會或可能不會更改 的值。
結(jié)束Crawl可能會像這樣解決這兩個問題;
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)注
- 124 瀏覽
添加回答
舉報