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)
여기서:
이 경우 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!