【发布时间】:2017-12-06 10:16:11
【问题描述】:
我正在学习围棋,遵循在线教程“围棋之旅”。
在这个练习中:https://tour.golang.org/concurrency/10
在继续解决问题之前,我想尝试一些简单的事情:
func Crawl(url string, depth int, fetcher Fetcher) {
fmt.Println("Hello from Crawl")
if depth <= 0 {
return
}
body, urls, err := fetcher.Fetch(url)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("found: %s %q\n", url, body)
for _, u := range urls {
fmt.Println("in loop with u = %s", u)
go Crawl(u, depth-1, fetcher) //I added "go" here
}
}
我唯一添加的是在递归调用Crawl 之前的go 命令。我预计它不会对行为产生太大影响。
但是打印输出是:
Hello from Crawl
found: http://golang.org/ "The Go Programming Language"
in loop with u = http://golang.org/pkg/
in loop with u = http://golang.org/cmd/
我希望在循环的每次迭代中看到Hello from Crawl。
为什么我的Crawl 子程序没有被执行?
【问题讨论】:
-
我同意链接的问题也回答了我的问题。
标签: go