读 | 无缓冲chan | 阻塞等待 |
写 | 无缓冲chan | 阻塞等待 |
读 | 有缓冲chan | 先读后阻塞 |
写 | 有缓冲chan | 先写后阻塞 |
读 | close的无缓冲chan | 读到零值,可通过ok判断 |
写 | close的无缓冲chan | panic |
读 | close的有缓冲chan | 先读,后读到零值,可通过ok判断 |
写 | close的有缓冲chan | panic |
读 | nil的chan | 阻塞 |
写 | nil的chan | 阻塞 |
1、读时:先读、再阻塞等待、同时通过ok判断是否close(即是否真正取到值,因为有缓冲chan在close后会取到零值);
2、写时:先写,再阻塞等待、写close的chan会panic;
3、nil的chan读写都会阻塞;
4、for range等同于for ok break,即:
5、channel应应用于两个go程中,在一个go程可能发生死锁。
6、关闭未初始化的通道;重复关闭通道;向已经关闭的通道中发送数据;这三种情况也会引发 panic