恐慌:运行时错误:数组长度不为空时索引超出范围
提供的代码片段尝试迭代字符串以包含元音的单独单词。然而,尽管数组长度不为空,它还是遇到了“恐慌:运行时错误:索引超出范围”错误。
要理解此错误,必须深入研究底层切片数据结构。
理解切片
Go 中的切片是数组段的描述符。它由三个部分组成:指向实际数组的指针、段的长度及其容量(段可以容纳的最大长度)。
使用 make([]string, 0, 4) 创建切片时,分配一个空的底层数组,初始长度为 0,容量为 4。
区分
result := make([]string, 0, 4) 与 result := make([]string, 4) 的不同之处如下:
理解append
append 函数将元素添加到切片的末尾。如果切片有足够的容量,它会重新切片目标以容纳新元素。否则,将分配一个新的底层数组。
应用于代码
在提供的代码中,行 result := make([]string, 0, 4 ) 创建一个空切片。尝试在循环内访问 result[0] 将导致恐慌。
要纠正此问题,请使用追加来填充切片,如以下代码片段所示:
<code class="go">for i := 0; i < len(strs); i++ { if strings.ContainsAny(strs[i], "eaiu") { result = append(result, strs[i]) } }</code>
或者,您可以使用基于范围的循环来简化代码:
<code class="go">for _, s := range strs { if strings.ContainsAny(s, "eaiu") { result = append(result, s) } }</code>
以上是当 Go 切片长度非空时,为什么会出现“panic:runtime error:index out of range”?的详细内容。更多信息请关注PHP中文网其他相关文章!