배열의 길이가 Null이 아닌 경우 "패닉: 런타임 오류: 인덱스가 범위를 벗어났습니다"로 이동
분석
제공된 Go 코드는 허용 범위를 벗어난 인덱스에 액세스하여 런타임 오류가 발생합니다. Go에서 슬라이스 작업을 할 때는 용량과 길이의 개념을 이해하는 것이 중요합니다.
슬라이스 이해
Go 슬라이스는 배열 세그먼트에 대한 설명자이며 배열에 대한 포인터, 세그먼트 길이 및 용량(세그먼트의 최대 길이)을 포함합니다.
make([]string, 0, 4) vs. make([]string, 4)
make 함수는 결과를 초기화하고 할당합니다. ([]string, 0, 4)는 길이가 0이고 용량이 4인 슬라이스를 생성하는 반면 result := make([]string, 4) (또는 그에 상응하는 결과 := []string{"", "", "" , ""}) 길이와 용량이 모두 4인 슬라이스를 초기화합니다.
Array Access
결과 := make([]string, 0, 4), 기본 배열이 비어 있으므로 result[0]에 액세스하면 런타임 오류가 발생합니다. 반면에 result := make([]string, 4)에는 4개의 문자열 요소가 있어 result[0], result[1], result[2] 및 result[3].
코드 해결 방법
myFunc 함수에서 문제가 있는 결과를 사용합니다 := make([]string , 0, 4) 초기화. 코드에 요소 추가가 필요하다는 점을 고려하면 result := make([]string, 0) 사용을 고려하고 추가 기능을 사용하여 요소를 추가해야 합니다. 또는 특정 요구 사항에 따라 result := []string{} 또는 result := make([]string, 4)를 사용할 수 있습니다.
다음은 make([]를 사용하여 작동하는 코드 버전입니다. 문자열, 0) 및 추가(The Go Playground):
<code class="go">package main import "fmt" func main() { fmt.Println(myFunc("Political srt")) } func myFunc(input string) []string { strs := strings.Fields(input) result := make([]string, 0) // Initialize with length 0 and append as needed for _, s := range strs { if strings.ContainsAny(s, "eaiu") { result = append(result, s) // Append to the result slice } } return result }</code>
위 내용은 배열 길이가 Null이 아닌 경우 Go 코드에서 \"panic: Runtime error: index out of range\" 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!