Go 走吧,这里发生了什么

Go 走吧,这里发生了什么,go,Go,我正在学习网络爬虫练习中的go Tour示例中的go频道 我的理解是 go func() 在后台运行func,如果没有任何东西阻止它,它应该完成func并返回 但下面的“爬行”似乎什么都不做。我理解得对吗 主程序包 进口( “fmt” ) 类型获取程序接口{ //Fetch返回URL和 //在该页面上找到的URL片段。 获取(url字符串)(正文字符串,url[]字符串,错误) } //爬网使用抓取器进行递归爬网 //以url开头的页面,最大深度。 func爬网(url字符串、深度int、抓取

我正在学习网络爬虫练习中的go Tour示例中的go频道

我的理解是

go func()
在后台运行func,如果没有任何东西阻止它,它应该完成func并返回

但下面的“爬行”似乎什么都不做。我理解得对吗

主程序包
进口(
“fmt”
)
类型获取程序接口{
//Fetch返回URL和
//在该页面上找到的URL片段。
获取(url字符串)(正文字符串,url[]字符串,错误)
}
//爬网使用抓取器进行递归爬网
//以url开头的页面,最大深度。
func爬网(url字符串、深度int、抓取器){
//TODO:并行获取URL。
//TODO:不要获取同一URL两次。
//此实现既不执行以下操作,也不执行以下操作:

如果深度当
main
包的
main
方法返回时,Go程序终止。执行此操作后,程序(包括所有goroutine)立即退出。请参阅:

程序执行首先初始化主包,然后调用函数main。当该函数调用返回时,程序退出。它不会等待其他(非main)goroutine完成

在本例中,您的
Crawl
方法生成多个goroutine并立即返回,而无需在这些goroutine上进行同步以等待它们完成。执行此操作后,控制流返回到
main
,它到达函数末尾并隐式返回,从而停止您的程序。请注意,这种交错行为viour不是确定性的——在某些情况下,您可以从一些Goroutine获得输出,但它们不太可能被如此迅速地安排执行


您需要为
爬网
实现一种机制,以阻止等待其生成的goroutine的结果。有几种机制可用于此操作,最常见和推荐的是使用。

什么是“什么都不做”?goroutine是否未运行(可能显示输出)?或者你是在问为什么在那里使用
go
?我希望这一行“fmt.Printf”(“找到:%s%q\n,url,body)”来打印传递给go-Crawl的u的内容,但没有打印任何内容。显示初始化值
fetcher
的代码。啊,我明白了。这太令人费解了,谢谢你的帮助。