【发布时间】:2012-09-01 04:46:11
【问题描述】:
我正在浏览 golang 并进行最后一个练习,将网络爬虫更改为并行爬取,而不是重复爬取 (http://tour.golang.org/#73)。我改变的只是爬取功能。
var used = make(map[string]bool)
func Crawl(url string, depth int, fetcher Fetcher) {
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)
for _,u := range urls {
if used[u] == false {
used[u] = true
Crawl(u, depth-1, fetcher)
}
}
return
}
为了使其并发,我在调用 Crawl 函数之前添加了 go 命令,但程序没有递归调用 Crawl 函数,只找到“http://golang.org/”页面而没有其他页面。
为什么我在函数Crawl的调用中加入go命令后程序不工作?
【问题讨论】:
标签: concurrency go