golang本身支持这种表达,增加一个接受变量如果chan没有关闭是true或者chan里有缓冲数据的时候,则可以取出,只有chan是关闭切没有缓冲数据的时候才会返回false,value会返回nil 不会有阻塞。
c1:=make(chan int)
value,ok:=<-c1
func main(){
c1:=make(chan int,5)
c1<-1
close(c1)
_,ok:=<-c1
fmt.Println(ok)
_,ok=<-c1
fmt.Println(ok)
}
更新:最官方合理但是比较绕的无阻塞操作channel方法, 请大家参考reflect标准库里的trySend tryRevice 方法