《Go语言圣经》阅读疑惑

BBX-Winner · · 3443 次点击
<a href="/user/huazonglin" title="@huazonglin">@huazonglin</a> 谢谢答复,我理解命令行参数放在goroutine中的必要性,只是没太理解原文中的说明文字,其实有点抠字眼了哈。结帖吧~
#3
更多评论
Hi, 命令行参数放在另一个goroutine 的原因是,这里用的worklist是一个不带缓存的Channels, 不带缓存的Channels在&#34;读/写&#34;的时候,都会产生阻塞,直到有另一个goroutine会&#34;写/读&#34;这个Channels, 所以, 代码修改为直接给worklist赋值的如下: ```go func main() { worklist := make(chan []string) // Start with the command-line arguments. worklist &lt;- os.Args[1:] // 这里main gogroutine 会阻塞住,直到worklist 在另一个goroutine被写入。 // 所以,为了避免被main goroutine被阻塞住,需要在这里新开一个goroutine. // Crawl the web concurrently. seen := make(map[string]bool) ```
#1