You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Go语言for循环遍历数组时遇‘panic: runtime error: index out of range’错误求助

解决Go语言数组遍历的"index out of range" panic问题

问题根源分析

  • 切片未初始化:你声明的var ar []int是零值切片,长度和容量都是0,此时通过ar[i]赋值或读取都会触发索引越界panic,因为切片内没有可访问的元素空间。
  • 索引逻辑错误:
    1. 第一个循环for i:=1; i<a; i++:如果输入a代表要读取的元素数量,这个循环只会执行a-1次,少读一个元素;同时从索引1开始赋值,既浪费了切片的0号位置,也因为切片未初始化直接触发panic。
    2. 第二个循环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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 22:45:53