# 无缓冲与有缓冲通道

URL: https://caijiao.org/go/04-concurrency/03-channel-types
Source: docs/go/04-concurrency/03-channel-types.md
Description: 本节介绍 Go 语言中无缓冲通道和有缓冲通道的区别与使用场景。

## 1. 通道简介

通道（Channel）用于 Goroutine 之间传递数据，实现同步和通信。

## 2. 无缓冲通道

无缓冲通道没有缓冲区，发送操作会阻塞，直到有 Goroutine 接收。

```go
ch := make(chan int)  // 无缓冲通道

go func() {
    ch <- 42  // 发送阻塞，等待接收
}()

fmt.Println(<-ch)  // 接收后发送解除阻塞
````

## 3. 有缓冲通道

有缓冲通道带有缓冲区，发送操作在缓冲区未满时不会阻塞。

```go
ch := make(chan int, 2)  // 有缓冲通道，容量为2

ch <- 1  // 立即发送，不阻塞
ch <- 2  // 立即发送，不阻塞

fmt.Println(<-ch)  // 输出1
fmt.Println(<-ch)  // 输出2
```

## 4. 选择使用场景

* 无缓冲通道用于严格同步
* 有缓冲通道适合异步处理，提高性能

---

理解缓冲特性，合理设计通道，提升并发程序效率。
