在 Go 语言中,Channel(通道)是 Goroutine 之间通信和同步的核心机制。根据创建时是否指定容量,Channel 分为 无缓冲(Unbuffered) 和 有缓冲(Buffered) 两种。 它们的核心区别在于 通信机制(同步 vs 异步) 和 阻塞行为。 --- 1. 无缓冲 Channel (Unbuffered Channel) 定义: 创建时没有指定容量,或者容量为 0。 语法: 或 核心特性:同步通信 (Synchronous) 无缓冲 Channel 类似于 “一手交钱,一手交货”。 发送阻塞: 发送操作 会一直阻塞,直到有另一个 Goroutine 执行接收操作 。 接收阻塞: 接收操作 会一直阻塞,直到有另一个 Goroutine 执行发送操作 。 强同步保证: 当发送操作完成时,意味着接收者 一定 已经收到了数据。它不仅传递数据,还充当了同步屏障(Synchronization Barrier)。 场景举例 就像打电话,你(发送者)说话时,对方(接收者)必须在线听着,否则你无法把话说完。 代码示例 --- 2. 有缓冲 Channel (Buff...