Home > Article > Backend Development > Why Does \"panic: runtime error: index out of range\" Occur When a Go Slice Has a Non-Null Length?
Panic: Runtime Error: Index Out of Range When Array Length Is Not Null
The provided code snippet attempts to iterate through a string to separate words containing vowels. However, it encounters a "panic: runtime error: index out of range" error, despite the array length not being null.
To understand this error, it's essential to delve into the underlying slice data structure.
Understanding Slices
A slice in Go is a descriptor of an array segment. It comprises three components: a pointer to the actual array, the segment's length, and its capacity (the maximum length the segment can accommodate).
When creating a slice using make([]string, 0, 4), an empty underlying array is allocated, with an initial length of 0 and a capacity of 4.
Making a Distinction
result := make([]string, 0, 4) differs from result := make([]string, 4) in the following way:
Understanding append
The append function adds elements to a slice's end. If the slice has enough capacity, it reslices the destination to accommodate the new elements. Otherwise, a new underlying array is allocated.
Applying to the Code
In the provided code, the line result := make([]string, 0, 4) creates an empty slice. Attempting to access result[0] within the loop will result in a panic.
To rectify this issue, use append to populate the slice, like in the following code snippet:
<code class="go">for i := 0; i < len(strs); i++ { if strings.ContainsAny(strs[i], "eaiu") { result = append(result, strs[i]) } }</code>
Alternatively, you can simplify the code using a range-based loop:
<code class="go">for _, s := range strs { if strings.ContainsAny(s, "eaiu") { result = append(result, s) } }</code>
The above is the detailed content of Why Does \"panic: runtime error: index out of range\" Occur When a Go Slice Has a Non-Null Length?. For more information, please follow other related articles on the PHP Chinese website!