在goroutine 写入channel,为何还要在goroutine关闭才能遍历

delaywu · · 1218 次点击
fenglangjuxu
出售域名 http://letsgo.xin
我大概知道 为什么了 wg.wait是阻塞的 是需要等待上面 100个阻塞的 goroutine 执行完成之后 才能继续往下执行 但是这100个 goroutine 可以完成的前提是 ret 这个chanel的数据 呗读取 就是需要下面的 range 来执行 才可以 让这goroutine 完成 但是 wg.wait 阻塞了 就没法继续往下执行下去
#4
更多评论
delaywu
Golang在路上...
我自己想应该是使用 ``` wg.Wait() close(ret) ``` 阻碍的主线程,但是同时遍历是发生在主线程上。这时候定义的channel是无缓存的,这时候没办法发现这个无缓冲的channel又被消费的可能,故而会发生异常。这时候使用 协程的话,由于不堵塞。使得 channel消费成为的可能。 ``` go func() { defer close(ret) wg.Wait() }() ```
#1
fenglangjuxu
出售域名 http://letsgo.xin
关注
#2