# panic: 向已关闭的 channel 发送数据（在 select 语句中）

- **ID:** `go/send-on-closed-channel-select`
- **领域:** go
- **类别:** runtime_error
- **验证级别:** ai_generated
- **修复率:** 80%

## 根因

select 的某个 case 尝试向已被其他 goroutine 关闭的 channel 发送数据，尽管通常认为 select 能保护发送操作。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| 1.18 | active | — | — |
| 1.22 | active | — | — |

## 解决方案

1. **** (90% 成功率)
   ```
   select {
case ch <- v:
case <-done:
    return
}
   ```
2. **** (92% 成功率)
   ```
   // only the owner closes; producers send via a request channel
   ```

## 无效尝试

- **** — default does not prevent the panic when the send case is selected and the channel is closed. (90% 失败率)
- **** — Buffering delays but does not prevent the panic; a closed channel rejects all sends regardless of buffer. (85% 失败率)
