在Go语言for循环遍历数组时遇‘panic: runtime error: index out of range’错误求助
解决Go语言数组遍历的"index out of range" panic问题
问题根源分析
- 切片未初始化:你声明的
var ar []int是零值切片,长度和容量都是0,此时通过ar[i]赋值或读取都会触发索引越界panic,因为切片内没有可访问的元素空间。 - 索引逻辑错误:
- 第一个循环
for i:=1; i<a; i++:如果输入a代表要读取的元素数量,这个循环只会执行a-1次,少读一个元素;同时从索引1开始赋值,既浪费了切片的0号位置,也因为切片未初始化直接触发panic。 - 第二个循环
for i:=a; i>0; i--:切片的最大有效索引是长度-1,这里从i=a开始访问,必然超出切片范围。
- 第一个循环
修正后的代码
package main import ( "fmt" ) func main() { var a int var b int fmt.Scan(&a) // 初始化切片,指定长度为a,确保有足够空间存储元素 ar := make([]int, a) // 从0开始遍历,读取a个元素 for i := 0; i < a; i++ { fmt.Scan(&b) ar[i] = b } fmt.Print("Hello") // 从最后一个有效索引开始反向遍历 for i := a - 1; i >= 0; i-- { b = ar[i] fmt.Print(b) } }
关键修正点
- 使用
make([]int, a)初始化切片,直接分配能容纳a个元素的空间,避免因切片为空导致的越界。 - 循环索引从0开始,符合Go语言切片/数组的索引规则,保证读取到指定数量的元素。
- 反向遍历时从
a-1开始,确保只访问切片的有效索引范围。
内容的提问来源于stack exchange,提问作者Amireev Kontakty
相关产品推荐
相关产品推荐

