我剛剛開始學習go,并且一直在完成巡回演出。最后一個練習是編輯Web爬網(wǎng)程序以并行爬網(wǎng),而無需重復。這是練習的鏈接:http : //tour.golang.org/#70這是代碼。我只更改了爬網(wǎng)和主要功能。因此,我將發(fā)布這些內(nèi)容以使其保持整潔。 // Crawl uses fetcher to recursively crawl // pages starting with url, to a maximum of depth. var used = make(map[string]bool) var urlchan = make(chan string) func Crawl(url string, depth int, fetcher Fetcher) { // TODO: Fetch URLs in parallel. // Done: Don't fetch the same URL twice. // This implementation doesn't do either: done := make(chan bool) if depth <= 0 { return } body, urls, err := fetcher.Fetch(url) if err != nil { fmt.Println(err) return } fmt.Printf("\nfound: %s %q\n\n", url, body) go func() { for _, i := range urls { urlchan <- i } done <- true }() for u := range urlchan { if used[u] == false { used[u] = true go Crawl(u, depth-1, fetcher) } if <-done == true { break } } return } func main() { used["http://golang.org/"] = true Crawl("http://golang.org/", 4, fetcher) }問題是,當我運行程序時,爬網(wǎng)程序在打印后停止 not found: http://golang.org/cmd/僅當我嘗試使程序并行運行時,才會發(fā)生這種情況。如果我讓它線性運行,那么所有網(wǎng)址都可以正確找到。注意:如果我沒有正確執(zhí)行此操作(我的意思是并行),則表示歉意。
為什么函數(shù)會提前返回?
慕的地6264312
2021-05-14 14:15:26