>백엔드 개발 >Golang >왜 Go의 `a[3:]` 슬라이스 패닉은 발생하지 않지만 `a[4:]`는 발생합니까?

왜 Go의 `a[3:]` 슬라이스 패닉은 발생하지 않지만 `a[4:]`는 발생합니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-10 08:03:10187검색

Why Doesn't Go's `a[3:]` Slice Panic, But `a[4:]` Does?

Go의 슬라이스 표현식 동작 이해

Go에서 슬라이싱은 슬라이스, 배열 또는 문자열에서 특정 요소를 추출하는 강력한 메커니즘입니다. 그러나 다음과 같은 특정 동작은 예상치 못한 것처럼 보일 수 있습니다.

a := []int{1, 2, 3}
fmt.Println(a[0:])
fmt.Println(a[1:])
fmt.Println(a[2:])
fmt.Println(a[3:]) // doesn't panic - why??
fmt.Println(a[4:]) // panics as expected

왜[3:] 패닉이 발생하지 않습니까?

Go 언어에 따르면 사양에 따르면 배열 또는 문자열 슬라이스의 경우 인덱스는 다음 조건을 만족하는 경우 범위 내에 있습니다. 0

따라서 a[3:]는 인덱스 상한 3이 결정된 유효한 범위 내에 있으므로 패닉이 발생하지 않습니다. 캡(a)으로. 인덱스 3에서 시작하고 길이가 0(len(a) - 3 = 0)이므로 빈 슬라이스가 발생합니다.

왜[4:] 패닉이 발생하나요?

반면에 a[4:]는 인덱스 상한 4가 len(a)와 cap(a)를 모두 초과하기 때문에 패닉 상태가 됩니다. 사양에는 런타임 시 인덱스가 범위를 벗어나면 런타임 패닉이 발생할 수 있다고 명시되어 있습니다.

위 내용은 왜 Go의 `a[3:]` 슬라이스 패닉은 발생하지 않지만 `a[4:]`는 발생합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.