channel 的 15 条规则和底层实现

操作规则

操作nil已关闭的 channel未关闭有缓冲区的 channel未关闭无缓冲区的 channel
关闭panicpanic成功关闭,然后可以读取缓冲区的值,读取完之后,继续读取到的是 channel 类型的默认值成功关闭,之后读取到的是 channel 类型的默认值
接收阻塞不阻塞,读取到的是 channel 类型的默认值不阻塞,正常读取值阻塞
发送阻塞panic不阻塞,正常写入值阻塞

编译规则

操作channel 類型結果
接收只写 channel编译错误
发送只读 channel编译错误
关闭只读 channel编译错误