登录
首页 >  Golang >  Go问答

如何实现等待goroutines执行完成后退出main函数?

来源:SegmentFault

时间:2023-01-08 11:57:57 250浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《如何实现等待goroutines执行完成后退出main函数?》,介绍一下go,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

之前爬虫用python写总是出问题,于是换成了Go来写,大致内容如下:

    for ;next_url != first_url; {
        count += 1
        strBody = getContent(next_url)
        re = regexp.MustCompile("photos-view-id-\\d+.html")
        next_url =  getNextUrl(strBody)
        re = regexp.MustCompile("http://xxxx/data/[^\"]+")
        pic_url = re.FindAllString(strBody, 2)[1]
        filename = fmt.Sprintf("%03d.jpg", count)
        go downloadFromUrl(pic_url, save_path + filename)
    }

但是这样会有一个问题就是我的downloadFromUrl还没执行完成时,程序已经退出了,导致最后几个文件未下载成功。有什么方法可以等待操作完成之后退出程序的么?

正确答案

参考 @方泽图 的回复,实现方式如下:

var wg sync.WaitGroup
...
    for ;next_url != first_url; {
        ....
        filename = fmt.Sprintf("%03d.jpg", count)
        wg.Add(1)
        go func(pic_url string, saveto string) {
            defer wg.Done()
            downloadFromUrl(pic_url, saveto)
        }(pic_url, saveto)
    }
    wg.Wait()

今天关于《如何实现等待goroutines执行完成后退出main函数?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表