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