gpt4 book ai didi

Go例程从一个URL下载到一个文件

转载 作者:IT王子 更新时间:2023-10-29 01:51:09 26 4
gpt4 key购买 nike

我目前正在学习围棋。在学习了一些基础知识之后,我一直在尝试编写一个小程序,使用 goroutines 同时将网页( slice 中的 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) 它就可以正常工作。我究竟做错了什么?我必须在例程中使用 channel 吗?

最佳答案

问题是 main 在 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()
....
}

关于Go例程从一个URL下载到一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37176817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com