为了账号安全,请及时绑定邮箱和手机立即绑定

执行例程从 URL 下载到文件

执行例程从 URL 下载到文件

Go
侃侃无极 2022-01-10 15:03:04
我正在学习GO。在学习了一些基础知识之后,我一直在尝试编写一个小程序,它可以使用 goroutines 将网页(切片中的 url)同时下载到不同的文件中。这是我写的一些代码:func downloadFromUrl(url string) {    tokens := strings.Split(url, "/")    fileName := tokens[len(tokens)-1]    // I took out the bit that download the file for testing.    fmt.Println("Downloading", url, "to", fileName)}我注释掉了实际下载页面进行测试的位。在我的主要功能中,我正在这样做:func main() {    urls := []string{"http://www.google.com", "http://www.yahoo.com", "http://www.google.com"}    for _, url := range urls {        fmt.Println(url);        go downloadFromUrl(url);    }}问题是当我使用表达式时go downloadFromUrl(url);,函数 downloadFromUrl 没有运行。但是如果我只是downloadFromUrl(url)在循环中使用它就可以了。我究竟做错了什么?我必须在例程中使用通道吗?
查看完整描述

1 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

问题是在你的 goroutine 返回之前主要退出,最简单的解决方案是使用sync.WaitGroup.


func main() {

    urls := []string{"http://www.google.com", "http://www.yahoo.com", "http://www.google.com"}

    var wg sync.WaitGroup

    for _, url := range urls {

        wg.Add(1)

        log.Println(url)

        go downloadFromUrl(url, &wg)

    }

    wg.Wait()

}


func downloadFromUrl(url string, wg *sync.WaitGroup) {

    defer wg.Done()

    ....

}


查看完整回答
反对 回复 2022-01-10
  • 1 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信