# 致命错误：分配堆区域元数据时内存不足

- **ID:** `go/goroutine-count-explosion`
- **领域:** go
- **类别:** resource_error
- **验证级别:** ai_generated
- **修复率:** 80%

## 根因

对每个传入请求或每个条目无限制地使用 go 语句，生成数百万个 goroutine，耗尽内存。

## 版本兼容性

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

## 解决方案

1. **** (95% 成功率)
   ```
   sem := make(chan struct{}, 100)
for _, item := range items {
    sem <- struct{}{}
    go func(it Item) {
        defer func() { <-sem }()
        process(it)
    }(item)
}
   ```
2. **** (93% 成功率)
   ```
   jobs := make(chan Job, 1000)
for i := 0; i < runtime.NumCPU(); i++ {
    go func() {
        for j := range jobs { process(j) }
    }()
}
   ```

## 无效尝试

- **** — Goroutine stacks dominate memory; GC tuning does not reduce goroutine count. (85% 失败率)
- **** — GOMEMLIMIT forces GC but goroutines keep spawning; OOM still occurs or throughput collapses. (70% 失败率)
