Go channel

golang/channel2026-10-16 18:03:58

Go channel是在 goroutine 之间传递特定类型值并建立同步关系的通道,可为无缓冲或有界缓冲形式。

阻塞与关闭

无缓冲通道的发送与接收需要配对;有缓冲通道在容量用尽时阻塞发送。向已关闭通道发送会 panic,nil 通道上的发送和接收会一直阻塞。

所有权与选择

应明确哪个发送方负责关闭,避免多个参与者重复关闭。接收方可检查返回的 ok 判断通道是否关闭;关闭不是撤销已完成副作用的手段。

select 用于在多个通信操作间选择,也可结合取消信号退出。通道并不自动解决协议死锁,仍需检查所有路径能否推进并释放资源。

参考资料

本页目录