← 中文资源

简体中文版本

Go 对切片或数组报 panic: index out of range

通过在访问前校验边界并显式处理切片长度,修复 index out of range panic。

阅读英文原文

症状

程序以 runtime error: index out of range panic,消息给出尝试的索引与实际长度,例如 index 3 with length 2。这是差一错误、空输入,或越界重切片。由于 Go 在运行时检查边界而非返回错误,panic 就是长度假设出错的信号。

诊断

读取索引与长度;访问前加边界检查;检查重切片的边界运算。

go run main.go 2>&1 | grep "index out of range"

根因

代码访问了切片或数组有效范围之外的索引,原因是缺少边界检查、重切片错误,或未处理空输入。

修复

索引前检查长度;把重切片边界夹紧到长度;显式处理空输入而非假定至少有一个元素。访问点的边界检查相对于崩溃代价极低。

验证

用此前 panic 的输入以及空输入、单元素输入分别重跑,确认都返回确定结果。处理边界情形才是修复,而非只针对某个输入打补丁。

常见陷阱

用 recover 吞掉越界 panic 会掩盖逻辑错误;应修正边界假设。