详解 goLang 的 channel

概述

下面表格中的内容是 Go 语言中 channel 数据类型的使用规则,相信读者已经可以熟练掌握,本文主要分析 channel 的内部实现中的数据结构和算法,所以相关的基础概念会直接跳过, 希望读者阅读完本文后,可以深入理解表格中的各类规则,从应用层代码到底层实现,能够知其然并知其所以然。

操作规则

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

编译规则

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

你可能感兴趣的:(goLang,golang)