배열 길이가 Null이 아닌 경우 "패닉: 런타임 오류: 인덱스가 범위를 벗어났습니다."로 이동
배열 길이 이해 및 용량
Go의 배열은 고정된 수의 값을 저장하고 지정된 길이를 갖습니다. 배열의 길이에 따라 포함된 요소의 수가 결정됩니다. 그러나 배열의 추상화인 Go 슬라이스에는 용량이라는 또 다른 개념이 도입되었습니다. 용량은 슬라이스가 보유할 수 있는 최대 요소 수를 나타냅니다.
make([]T, len, cap)를 사용하여 슬라이스를 생성할 때(여기서 T는 요소 유형임) 길이와 용량을 지정하게 됩니다. 용량이 길이보다 크면 메모리를 재할당하지 않고도 추가 요소를 수용하도록 슬라이스를 확장할 수 있습니다. 용량이 0이면 길이를 용량으로 사용합니다.
오류 해결
제공된 코드 스니펫에서 make 함수를 사용하여 [ ]길이가 0이고 용량이 4인 문자열 슬라이스:
<code class="go">result := make([]string, 0, 4)</code>
이는 슬라이스가 처음에 0개의 문자열을 보유할 수 있고 메모리를 재할당하지 않고도 최대 4개의 문자열을 보유하도록 확장할 수 있음을 의미합니다.
"패닉: 런타임 오류: 인덱스가 범위를 벗어났습니다"라는 오류는 슬라이스 길이를 초과하는 인덱스의 요소에 액세스하는 것이 유효하지 않기 때문에 발생합니다. 원본 코드 조각에서 루프는 result[0]부터 시작하는 요소에 액세스하려고 시도하지만 슬라이스가 비어 있으므로 해당 인덱스에 요소가 없습니다.
슬라이스에 요소 추가
오류를 해결하려면 추가 기능을 사용하여 슬라이스에 요소를 추가해야 합니다. 추가 함수는 추가된 요소가 있는 새 슬라이스를 반환합니다.
<code class="go">result = append(result, "foo")</code>
요소를 추가할 때마다 슬라이스의 길이가 늘어나고, 용량에 도달하면 더 큰 용량으로 새로운 기본 배열이 할당됩니다. . 이 경우 첫 번째 추가에서 길이가 1로 늘어나고 용량이 4이므로 재할당이 필요하지 않습니다.
간단한 코드 예
간단한 예는 다음과 같습니다. 오류 없이 슬라이스에 요소를 추가하기 위해 추가를 사용합니다:
<code class="go">package main import "fmt" func main() { result := make([]string, 0, 4) // Append elements to the slice result = append(result, "foo") result = append(result, "bar") // Access the elements using valid indices fmt.Println(result[0]) // Output: foo fmt.Println(result[1]) // Output: bar }</code>
이 예에서 make 함수는 초기 길이가 0이고 용량이 4인 슬라이스를 생성합니다. 그런 다음 추가를 사용합니다. 슬라이스에 두 개의 요소를 추가합니다. 마지막으로 "인덱스 범위를 벗어났습니다" 오류가 발생하지 않고 유효한 인덱스를 사용하여 요소에 액세스할 수 있습니다.
위 내용은 배열 길이가 null이 아닌 경우에도 내 Go 코드에서 \'패닉: 런타임 오류: 인덱스가 범위를 벗어났습니다\' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!