data, ok := <- chan第一个变量表示读出的数据,第二个变量表示是否成功读取了数据,而当chan没有关闭且没有数据时继续读会阻塞。
- 如果chan已经关闭,且没有数据,那ok为false
- 如果chan已经关闭,且有数据,那ok为true
- 如果chan没有关闭,且没有数据,那会阻塞
- 如果chan没有关闭,且有数据,那ok为true
判断这个chan是否关闭可以直接循环读取chan,利用select语句判断其有没有阻塞
func check(ch chan int) bool {
ok := true
for ok {
select {
case _, ok = <-ch:
default:
return false
}
}
return true
}