登录
首页 >  Golang >  Go问答

紧急警告:索引超出范围错误

来源:stackoverflow

时间:2024-03-19 20:33:29 347浏览 收藏

在读取 JSON 文件创建数据集合时,开发者遇到了“索引超出范围”错误。这是因为在循环迭代时,使用的索引长度与实际数据长度不符。调整循环,分别对两个数组进行迭代,解决了问题。通过将循环分为两部分,开发者能够针对每个数组的特定长度进行迭代,从而避免了索引超出范围的错误。

问题内容

我正在尝试创建一个从 json 文件读取数据集合的函数,但我不断收到此错误

panic: runtime error: index out of range

并且它没有从 json 文件导入所有数据,

我认为我的 for 循环有问题。

// read our opened xmlFile as a byte array.
byteValue, _ := ioutil.ReadAll(jsonFile)

// initialize Int array
var interns Int

// initialize Com array
var companies Com

// unmarshal byteArray
json.Unmarshal(byteValue, &interns)
json.Unmarshal(byteValue, &companies)

// iterate through every student within our students array and
// print out the student ID, first & last name
for i := 0; i < len(interns.Int); i++ {
    fmt.Println("Student first name: " + interns.Int[i].Name.FirstName)
    fmt.Println("Student last name: " + interns.Int[i].Name.LastName)
    fmt.Println("Company name: " + companies.Com[i].CompanyName)
    fmt.Println("Company email address: " + companies.Com[i].CompanyEmail + "\n")
}

解决方案


因为你使用 int 数组的 len 来迭代 com 数组,而 com 数组的 len 不同,所以当迭代到 com 数组不可用的索引时,程序会出现混乱

//program panics if [i] is not valid
fmt.println("company name: " + companies.com[i].companyname)
fmt.println("company email address: " + companies.com[i].companyemail + "\n")

将循环分成两部分进行迭代,它就会起作用

// iterate Int array
for i := 0; i < len(interns.Int); i++ {
    fmt.Println("Student first name: " + interns.Int[i].Name.FirstName)
    fmt.Println("Student last name: " + interns.Int[i].Name.LastName)
}
// iterate Com array
for i := 0; i < len(companies.Com); i++ {
    fmt.Println("Company name: " + companies.Com[i].CompanyName)
    fmt.Println("Company email address: " + companies.Com[i].CompanyEmail + "\n")
}

今天关于《紧急警告:索引超出范围错误》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>