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

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

Linda Hamilton
풀어 주다: 2024-12-10 08:03:10
원래의
184명이 탐색했습니다.

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

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