在thissolution到tenthslide并发Go之旅我有一个关于以下部分的问题:done:=make(chanbool)fori,u:=rangeurls{fmt.Printf("->Crawlingchild%v/%vof%v:%v.\n",i,len(urls),url,u)gofunc(urlstring){Crawl(url,depth-1,fetcher)done在channeldone中添加和删除true并运行两个单独的for循环有什么目的?是否只是阻塞直到go例程完成?我知道这是一个示例练习,但这样一开始不会破坏创建新线程的意义吗?为什么你不能只调用goCrawl
我正在完成golang之旅并进行最后的练习,将网络爬虫更改为并行爬行而不是重复爬行(http://tour.golang.org/#73)。我只更改了抓取功能。varused=make(map[string]bool)funcCrawl(urlstring,depthint,fetcherFetcher){ifdepth为了使其并发,我在调用函数Crawl之前添加了go命令,但程序没有递归调用Crawl函数,而是只找到“http://golang.org/”页面,没有其他页面。为什么在Crawl函数的调用中加入了go命令,程序不运行? 最佳答案
我正在参加GoTour,感觉除了并发之外我对这门语言已经有了很好的理解。slide10是一个要求读者并行化网络爬虫的练习(并使其不包括重复,但我还没有到达那里。)这是我目前所拥有的:funcCrawl(urlstring,depthint,fetcherFetcher,chchanstring){ifdepth我的问题是,我应该把close(ch)调用放在哪里。如果我在Crawl方法的某处放置一个deferclose(ch),那么程序最终会从一个生成的goroutine写入一个封闭的channel,因为对Crawl的调用将在生成的goroutine之前返回。如果我省略了对close(c
我正在参加GoTour,感觉除了并发之外我对这门语言已经有了很好的理解。slide10是一个要求读者并行化网络爬虫的练习(并使其不包括重复,但我还没有到达那里。)这是我目前所拥有的:funcCrawl(urlstring,depthint,fetcherFetcher,chchanstring){ifdepth我的问题是,我应该把close(ch)调用放在哪里。如果我在Crawl方法的某处放置一个deferclose(ch),那么程序最终会从一个生成的goroutine写入一个封闭的channel,因为对Crawl的调用将在生成的goroutine之前返回。如果我省略了对close(c