> 백엔드 개발 > Golang > Go에서 슬라이스할 때 \'슬라이스 경계가 범위를 벗어났습니다\' 오류를 방지하는 방법은 무엇입니까?

Go에서 슬라이스할 때 \'슬라이스 경계가 범위를 벗어났습니다\' 오류를 방지하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-04 00:21:09
원래의
308명이 탐색했습니다.

How to Avoid

Go에서 슬라이스: 범위를 벗어난 오류 이해

Go에서 슬라이스를 슬라이스할 때 오류를 방지하려면 특정 경계를 준수하는 것이 중요합니다. 이러한 오류 중 하나는 "슬라이스 경계가 범위를 벗어났습니다." 오류입니다. 이 오류는 슬라이스 표현식으로 인해 허용 범위를 벗어나는 인덱스가 발생할 때 발생합니다.

제공된 코드 조각에서:

package main

import "fmt"

func main() {
    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)
}
로그인 후 복사

다음을 사용하여 C 슬라이스를 생성하려고 하면 오류가 발생합니다. 표현식 c := b[1:]. 이 오류는 하한(길이보다 크거나 같을 수 있음)이 아니라 상한으로 인해 발생합니다.

Go에서 슬라이싱의 기본 상한은 슬라이스된 피연산자의 길이입니다. . 그러나 이 경우 슬라이스된 피연산자 b의 길이는 0입니다. 따라서 기본 상한은 0이 됩니다. 결과적으로 c := b[1:] 표현식의 하한은 1이고 상한은 0이 됩니다. .

이는 슬라이스의 경우 인덱스가 다음을 충족해야 한다는 슬라이싱 규칙을 위반합니다. 조건:

0 <= low <= high <= cap(a)
로그인 후 복사

여기서:

  • low는 하한
  • high는 상한
  • cap(a)은 슬라이스된 피연산자의 용량

이 경우 1은 작거나 같지 않으므로 0으로 설정하면 표현식에서 범위를 벗어난 오류가 발생합니다.

이 문제를 해결하려면 슬라이싱할 때 명시적인 범위를 지정해야 합니다. 예:

c := b[1:1]        // Slice from index 1 to 1 (empty slice)
c := b[1:2]        // Slice from index 1 to 2 (contains the element at index 1)
c := b[1:cap(b)]   // Slice from index 1 to the capacity of the operand (contains all elements)
로그인 후 복사

위 내용은 Go에서 슬라이스할 때 \'슬라이스 경계가 범위를 벗어났습니다\' 오류를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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