# 恐慌：运行时错误：切片边界超出范围 [:6]，容量为4

- **ID:** `go/panic-runtime-error-slice-bounds-out-of-range-with-capacity`
- **领域:** go
- **类别:** runtime_error
- **验证级别:** ai_generated
- **修复率:** 80%

## 根因

尝试对切片进行超出其容量的重新切片，动态索引绕过了编译时检查。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| go1.21 | active | — | — |
| go1.22 | active | — | — |
| go1.23 | active | — | — |

## 解决方案

1. ```
   使用 make 预分配足够的容量：s := make([]int, 0, 10)；然后追加或重新切片在容量范围内。
   ```
2. ```
   在切片前检查容量：if cap(s) >= 6 { s = s[:6] } else { /* 处理错误 */ }
   ```

## 无效尝试

- **Adding bounds check with if condition but using wrong variable** — Often developers check len(s) but then use cap(s) for slicing, missing the capacity limit. (65% 失败率)
- **Using append to extend slice without understanding capacity growth** — append may reallocate, but the original slice's capacity remains; slicing after append on old reference still fails. (50% 失败率)
