패닉: 런타임 오류: 배열 길이가 Null이 아닐 때 인덱스가 범위를 벗어났습니다.
제공된 코드 조각은 문자열을 통해 반복을 시도합니다. 모음이 포함된 별도의 단어입니다. 그러나 배열 길이가 null이 아님에도 불구하고 "패닉: 런타임 오류: 인덱스가 범위를 벗어났습니다." 오류가 발생합니다.
이 오류를 이해하려면 기본 슬라이스 데이터 구조를 자세히 살펴보는 것이 중요합니다.
슬라이스 이해
Go에서 슬라이스는 배열 세그먼트의 설명자입니다. 실제 배열에 대한 포인터, 세그먼트 길이 및 용량(세그먼트가 수용할 수 있는 최대 길이)의 세 가지 구성 요소로 구성됩니다.
make([]string, 0, 4)를 사용하여 슬라이스를 생성하는 경우 , 초기 길이가 0이고 용량이 4인 빈 기본 배열이 할당됩니다.
Making a Distinction
result := make([]string, 0, 4)는 다음과 같은 방식으로 result := make([]string, 4)와 다릅니다.
추가 이해
추가 기능은 슬라이스 끝에 요소를 추가합니다. 조각의 용량이 충분하면 새 요소를 수용하기 위해 대상을 다시 조각화합니다. 그렇지 않으면 새로운 기본 배열이 할당됩니다.
코드에 적용
제공된 코드에서 result 라인은 다음과 같습니다:= make([]string, 0, 4 ) 빈 조각을 만듭니다. 루프 내에서 결과[0]에 액세스하려고 하면 패닉이 발생합니다.
이 문제를 해결하려면 다음 코드 조각과 같이 추가를 사용하여 슬라이스를 채웁니다.
<code class="go">for i := 0; i < len(strs); i++ { if strings.ContainsAny(strs[i], "eaiu") { result = append(result, strs[i]) } }</code>
또는 범위 기반 루프를 사용하여 코드를 단순화할 수 있습니다.
<code class="go">for _, s := range strs { if strings.ContainsAny(s, "eaiu") { result = append(result, s) } }</code>
위 내용은 Go 슬라이스의 길이가 Null이 아닐 때 \"패닉: 런타임 오류: 인덱스가 범위를 벗어났습니다\"가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!