我一直在进行游览,并且完成了网络爬虫练习,但是我认为我用来打印所有结果的技术可能效率不高。这是我的代码。我只编辑了爬网和主要功能,所以我将其发布。这是练习的链接(http://tour.golang.org/#70) var used = make(map[string]bool) func Crawl(url string, depth int, fetcher Fetcher, results chan string) { if depth <= 0 { return } body, urls, err := fetcher.Fetch(url) if err != nil { results <- fmt.Sprintf("%v",err) return } results <-fmt.Sprintf("\nfound: %s %q\n", url, body) for _,u := range urls { if used[u] == false { used[u] = true go Crawl(u, depth-1, fetcher, results) } } return } //------------------------------------------------------------ func main() { used["http://golang.org/"] = true results := make(chan string) go Crawl("http://golang.org/", 4, fetcher, results) for i := 0; i < len(used); i++ { fmt.Println(<-results) } }我主要使用“ for i <len(used)”行,以确保仅在有结果要打印时才打印结果的值。我不能只用 for i := range results因为它是递归的,所以很难在爬网函数中使用“ close(results)”,但是用这种方式,我必须找到每次使用的变量的长度。有一个更好的方法吗?
1 回答
- 1 回答
- 0 关注
- 230 浏览
添加回答
举报
0/150
提交
取消