《Go语言圣经》阅读疑惑

BBX-Winner · · 2431 次点击 · 开始浏览    置顶

#### 原文链接 http://books.studygolang.com/gopl-zh/ch8/ch8-06.html #### 问题描述 对于下面的代码片段,原文中有一段是“这里将命令行参数传入worklist也是在一个另外的goroutine中进行的,这是为了避免channel两端的main goroutine与crawler goroutine都尝试向对方发送内容,却没有一端接收内容时发生死锁”。没有明白这里“为了避免channel两端的main goroutine与crawler goroutine都尝试向对方发送内容”是什么意思? 如果不在另外的goroutine中执行`worklist <- os.Args[1:]`,main goroutine中执行完`worklist <- os.Args[1:]`后直接死锁,之后for循环中的crawler goroutine根本不会执行,何来的“channel两端的main goroutine与crawler goroutine都尝试向对方发送内容”? ``` func main() { worklist := make(chan []string) // Start with the command-line arguments. go func() { worklist <- os.Args[1:] }() // Crawl the web concurrently. seen := make(map[string]bool) for list := range worklist { for _, link := range list { if !seen[link] { seen[link] = true go func(link string) { worklist <- crawl(link) }(link) } } } } ```

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077

2431 次点击  
加入收藏 微博
3 回复  |  直到 2021-05-11 23:30:49
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传