Home  >  Article  >  Backend Development  >  Why Does \"panic: runtime error: index out of range\" Occur When a Go Slice Has a Non-Null Length?

Why Does \"panic: runtime error: index out of range\" Occur When a Go Slice Has a Non-Null Length?

Linda Hamilton
Linda HamiltonOriginal
2024-10-31 15:24:52503browse

Why Does

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:

  • make([]string, 0, 4): Initializes an empty array, meaning accessing result[0] will cause a panic.
  • make([]string, 4): Initializes an array with 4 elements, allowing access to result[0] through result[3].

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn