go channel tips
一、只有一个goroutine时,读写阻塞的chan会出错(“fatal error: all goroutines are asleep - deadlock!”)。包括未make的chan(chan = nil)
二、已经close的chan,写操作会panic(“panic: send on closed channel”),仍然可读取,实时返回数据而不会阻塞,chan中无数据会取到默认值
三、select中如果加超时case(case <- time.After(2 * time.Second):)的话,其他case的chan若一直不为空,则超时case永远不会执行。
解决方法:在单独的select中,只加超时case
for { select { case <- ch: } select { case <- time.After(1 * time.Second): } }