Concurrency 如何打印并发和递归函数的结果?
我已经完成了围棋之旅,我已经完成了网络爬虫练习,但是我认为我用来打印所有结果的技术可能效率低下 这是我的密码。我只编辑了爬网和主要功能,所以我将发布它。以下是练习()的链接 因为爬网函数是递归的,所以很难在爬网函数中使用“close(results)”,但按照我的方法,我必须找到每次使用的变量的长度Concurrency 如何打印并发和递归函数的结果?,concurrency,for-loop,go,Concurrency,For Loop,Go,我已经完成了围棋之旅,我已经完成了网络爬虫练习,但是我认为我用来打印所有结果的技术可能效率低下 这是我的密码。我只编辑了爬网和主要功能,所以我将发布它。以下是练习()的链接 因为爬网函数是递归的,所以很难在爬网函数中使用“close(results)”,但按照我的方法,我必须找到每次使用的变量的长度 有更好的方法吗?要等待goroutine集合完成,请使用sync.WaitGroup 我相信你会发现官方文件中的例子非常熟悉 引述: var wg sync.WaitGroup var urls
有更好的方法吗?要等待goroutine集合完成,请使用
sync.WaitGroup
我相信你会发现官方文件中的例子非常熟悉
引述:
var wg sync.WaitGroup
var urls = []string{
"http://www.golang.org/",
"http://www.google.com/",
"http://www.somestupidname.com/",
}
for _, url := range urls {
// Increment the WaitGroup counter.
wg.Add(1)
// Launch a goroutine to fetch the URL.
go func(url string) {
// Fetch the URL.
http.Get(url)
// Decrement the counter.
wg.Done()
}(url)
}
// Wait for all HTTP fetches to complete.
wg.Wait()
var wg sync.WaitGroup
var url=[]字符串{
"http://www.golang.org/",
"http://www.google.com/",
"http://www.somestupidname.com/",
}
对于u,url:=范围url{
//递增WaitGroup计数器。
工作组.添加(1)
//启动goroutine以获取URL。
go func(url字符串){
//获取URL。
http.Get(url)
//减小计数器的数值。
wg.Done()
}(网址)
}
//等待所有HTTP回迁完成。
wg.Wait()
这将阻塞,直到所有工作完成
如果您真的希望在收集结果时逐步打印它们,最简单的方法是在抓取程序本身中进行
for i := range results
var wg sync.WaitGroup
var urls = []string{
"http://www.golang.org/",
"http://www.google.com/",
"http://www.somestupidname.com/",
}
for _, url := range urls {
// Increment the WaitGroup counter.
wg.Add(1)
// Launch a goroutine to fetch the URL.
go func(url string) {
// Fetch the URL.
http.Get(url)
// Decrement the counter.
wg.Done()
}(url)
}
// Wait for all HTTP fetches to complete.
wg.Wait()