> 백엔드 개발 > Golang > Go Slicing에서 Slice Bounds Out of Range 오류가 발생하는 이유는 무엇입니까?

Go Slicing에서 Slice Bounds Out of Range 오류가 발생하는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-29 12:46:10
원래의
161명이 탐색했습니다.

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

슬라이싱: Go의 Out-of-Bounds 오류

Go에서 슬라이싱은 기존 슬라이스의 일부를 추출하여 새로운 슬라이스를 만드는 것을 포함합니다. 일부분. 슬라이싱 중에 범위를 벗어난 오류가 발생하면 지정된 범위가 소스 슬라이스에 대한 유효한 인덱스 경계를 ​​초과했음을 나타냅니다.

다음 코드 조각을 고려하세요.

 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)
로그인 후 복사

}

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

fmt.Printf("%s len=%d cap=%d %v\n",
    s, len(x), cap(x), x)
로그인 후 복사

}

이 코드를 실행하면 범위를 벗어납니다. 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
로그인 후 복사

이 오류가 발생하는 이유를 이해하려면 Go의 슬라이싱에 적용되는 규칙을 자세히 살펴봐야 합니다.

슬라이싱 규칙

슬라이스 또는 배열을 분할할 때 지정된 인덱스는 명시적이거나 암시적일 수 있습니다. 인덱스가 명시적으로 제공되지 않으면 기본값은 특정 값입니다. 슬라이스의 경우:

  • 누락된 하한값의 기본값은 0입니다.
  • 누락된 상한값의 기본값은 len(slice)(cap(slice) 아님)입니다.

주어진 코드에서는 C 슬라이스를 생성하는 슬라이싱 표현식이 다음과 같기 때문에 오류가 발생합니다. is:

c := b[1:]
로그인 후 복사

하한(1)은 명시적으로 지정되지만 상한은 지정되지 않음을 의미합니다. 따라서 기본값은 0인 len(b)입니다. 그러나 지정된 하한(1)은 상한(0) 이하여야 합니다. 이 조건이 충족되지 않아 범위를 벗어난 오류가 발생합니다.

이 오류를 방지하려면 하한과 상한을 모두 명시적으로 지정할 수 있습니다. 예를 들어, b 슬라이스에서 두 번째 요소만 추출하려면 다음과 같이 작성합니다.

c := b[1:2] // c len=1 cap=4 [0]
로그인 후 복사

또는 두 번째 요소부터 시작하여 전체 b 슬라이스를 추출하려면 다음을 사용할 수 있습니다.

c := b[1:cap(b)] // c len=4 cap=4 [0 0 0 0]
로그인 후 복사

위 내용은 Go Slicing에서 Slice Bounds Out of Range 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿