> 백엔드 개발 > Golang > 배열 길이가 null이 아닌 경우에도 내 Go 코드에서 \'패닉: 런타임 오류: 인덱스가 범위를 벗어났습니다\' 오류가 발생하는 이유는 무엇입니까?

배열 길이가 null이 아닌 경우에도 내 Go 코드에서 \'패닉: 런타임 오류: 인덱스가 범위를 벗어났습니다\' 오류가 발생하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-10-29 04:39:02
원래의
681명이 탐색했습니다.

Why does my Go code throw a

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

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