Slicing: Out of Bounds Error in Go
Go에서 슬라이싱은 새로운 슬라이스를 생성할 수 있는 강력한 작업입니다. 기존 것. 그러나 런타임 오류를 방지하려면 잠재적인 위험을 이해하는 것이 중요합니다.
문제
다음 코드는 0을 슬라이싱할 때 범위를 벗어난 오류를 보여줍니다. 길이 슬라이스:
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) }
실행 시 이 코드는 범위를 벗어난 오류를 생성합니다. 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에서 슬라이스는 인접한 메모리 영역에 대한 참조입니다. 슬라이스 슬라이스를 생성하면 원본 슬라이스의 하위 집합에 대한 새 참조가 생성됩니다.
위 코드의 경우 슬라이스 b의 길이는 0이고 용량은 5입니다. Go 사양에 따르면 "슬라이스 인덱스 i는 현재 상태에서 슬라이스의 i번째 요소를 나타냅니다." 따라서 길이가 0인 슬라이스의 인덱스 1에 있는 요소에 액세스하려는 시도는 범위를 벗어났습니다.
해결책
경계 오류가 발생하면 슬라이싱할 때 사용된 인덱스가 원본 슬라이스의 유효한 범위 내에 있는지 확인하세요. 슬라이스의 경우 이 범위는 슬라이스의 길이와 용량에 따라 결정됩니다.
예를 들어 다음 작업이 유효합니다.
결론
Go에서의 슬라이싱은 데이터 조작의 기본 작업입니다. 그러나 런타임 오류를 방지하려면 제한 사항을 이해하는 것이 중요합니다. 슬라이싱 시 사용되는 인덱스가 유효한 범위 내에 있는지 확인하면 범위를 벗어난 오류를 효과적으로 방지하고 안전하게 슬라이스 작업을 할 수 있습니다.
위 내용은 Go에서 슬라이싱할 때 범위를 벗어난 오류를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!