症状
程序以 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 会掩盖逻辑错误;应修正边界假设。