#### 原文链接
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)
}
}
}
}
```
有疑问加站长微信联系(非本文作者)