# 通道的读写与关闭

URL: https://caijiao.org/go/04-concurrency/04-channel-ops
Source: docs/go/04-concurrency/04-channel-ops.md
Description: 本节介绍 Go 语言中通道的读写操作及通道关闭的使用方法，确保安全通信。

## 1. 通道读写

- 发送数据：`ch <- value`
- 接收数据：`value := <-ch`

```go
ch := make(chan int)

go func() {
    ch <- 10
}()

val := <-ch
fmt.Println("Received:", val)
````

## 2. 通道关闭

使用 `close(ch)` 关闭通道，表示不再发送数据。

```go
close(ch)
```

关闭通道后，不能再发送数据，否则会引发 panic。

## 3. 从关闭通道接收

接收关闭通道时，如果缓冲区为空，会返回零值和 `false`：

```go
v, ok := <-ch
if !ok {
    fmt.Println("Channel closed")
}
```

`ok` 用于判断通道是否关闭。

## 4. 遍历通道

可以用 `for range` 遍历通道，直到通道关闭：

```go
for v := range ch {
    fmt.Println(v)
}
```

---

正确读写与关闭通道，避免数据丢失和程序崩溃。
