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

为什么函数会提前返回?

为什么函数会提前返回?

Go
慕的地6264312 2021-05-14 14:15:26
我刚刚开始学习go,并且一直在完成巡回演出。最后一个练习是编辑Web爬网程序以并行爬网,而无需重复。这是练习的链接:http : //tour.golang.org/#70这是代码。我只更改了爬网和主要功能。因此,我将发布这些内容以使其保持整洁。 // Crawl uses fetcher to recursively crawl    // pages starting with url, to a maximum of depth.    var used = make(map[string]bool)    var urlchan = make(chan string)    func Crawl(url string, depth int, fetcher Fetcher) {        // TODO: Fetch URLs in parallel.        // Done: Don't fetch the same URL twice.        // This implementation doesn't do either:        done := make(chan bool)        if depth <= 0 {            return        }        body, urls, err := fetcher.Fetch(url)        if err != nil {            fmt.Println(err)            return        }        fmt.Printf("\nfound: %s %q\n\n", url, body)        go func() {            for _, i := range urls {                urlchan <- i            }            done <- true        }()        for u := range urlchan {            if used[u] == false {                used[u] = true                go Crawl(u, depth-1, fetcher)            }            if <-done == true {                break            }        }        return    }    func main() {        used["http://golang.org/"] = true        Crawl("http://golang.org/", 4, fetcher)    }问题是,当我运行程序时,爬网程序在打印后停止    not found: http://golang.org/cmd/仅当我尝试使程序并行运行时,才会发生这种情况。如果我让它线性运行,那么所有网址都可以正确找到。注意:如果我没有正确执行此操作(我的意思是并行),则表示歉意。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 199 浏览
慕课专栏
更多

添加回答

举报

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