Home > Backend Development > Golang > Why Do I Get a Slice Bounds Out of Range Error in Go Slicing?

Why Do I Get a Slice Bounds Out of Range Error in Go Slicing?

Mary-Kate Olsen
Release: 2024-11-29 12:46:10
Original
164 people have browsed it

Why Do I Get a Slice Bounds Out of Range Error in Go Slicing?

Slicing: Out-of-Bounds Error in Go

In Go, slicing involves extracting a portion of an existing slice to create a new slice. When an out-of-bounds error occurs during slicing, it indicates that the specified range exceeds the valid index boundaries for the source slice.

Consider the following code snippet:

package main</p>
<p>import "fmt"</p>
<p>func main() {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">a := make([]int, 5)
printSlice("a", a)
b := make([]int, 0, 5)
printSlice("b", b)
c := b[1:]
printSlice("c", c)
Copy after login

}

func printSlice(s string, x []int) {

fmt.Printf("%s len=%d cap=%d %v\n",
    s, len(x), cap(x), x)
Copy after login

}

Running this code results in an out-of-bounds error:

a len=5 cap=5 [0 0 0 0 0]
b len=0 cap=5 []
panic: runtime error: slice bounds out of range

goroutine 1 [running]:
main.main()
   /private/var/folders/q_/53gv6r4s0y5f50v9p26qhs3h00911v/T/compile117.go:10 +0x150
Copy after login

To understand why this error occurs, we need to delve into the rules governing slicing in Go.

Slicing Rules

When slicing a slice or array, the specified indices can be either explicit or implicit. If an index is not explicitly provided, it defaults to a specific value. For slices:

  • A missing lower bound defaults to 0.
  • A missing upper bound defaults to len(slice) (not cap(slice)).

In the given code, the error occurs because the slicing expression for creating the c slice is:

c := b[1:]
Copy after login

This means that the lower bound (1) is explicitly specified, but the upper bound is not. Therefore, it defaults to len(b), which is 0. However, the specified lower bound (1) must be less than or equal to the upper bound (0). This condition is not met, resulting in an out-of-bounds error.

To avoid this error, you can explicitly specify both the lower and upper bounds. For example, to extract only the second element from the b slice, you would write:

c := b[1:2] // c len=1 cap=4 [0]
Copy after login

Alternatively, if you want to extract the entire b slice starting from the second element, you can use:

c := b[1:cap(b)] // c len=4 cap=4 [0 0 0 0]
Copy after login

The above is the detailed content of Why Do I Get a Slice Bounds Out of Range Error in Go Slicing?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
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
Latest Articles by Author
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template