Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Kod My Go Melemparkan Ralat \"panik: runtime: index out of range\" Apabila Panjang Tatasusunan Bukan Nol?

Mengapa Kod My Go Melemparkan Ralat \"panik: runtime: index out of range\" Apabila Panjang Tatasusunan Bukan Nol?

DDD
DDDasal
2024-11-01 06:34:02193semak imbas

Why Does My Go Code Throw a

"Pergi “panik: ralat masa jalan: indeks di luar julat” Apabila Panjang Tatasusunan Bukan Nol

Analisis

Kod Go yang disediakan menghadapi ralat masa jalan kerana mengakses indeks melebihi julat yang dibenarkan Apabila bekerja dengan kepingan dalam Go, adalah penting untuk memahami konsep kapasiti dan panjang.

Memahami Slices

Slice Go ialah deskriptor segmen tatasusunan Ia merangkumi penunjuk kepada tatasusunan, panjang segmen dan kapasitinya (panjang maksimum segmen).

make([]string, 0, 4) lwn. make([]string, 4)

Fungsi make memulakan dan memperuntukkan hasil := make ([]rentetan, 0, 4) mencipta kepingan dengan panjang 0 dan kapasiti 4, manakala hasil := make([]rentetan, 4) (atau hasil yang setara := []rentetan{"", "", "" , ""}) memulakan hirisan dengan kedua-dua panjang dan kapasiti 4.

Akses Tatasusunan

Hasilnya := make([]string, 0, 4), tatasusunan asas kosong, jadi mengakses hasil[0] akan menyebabkan ralat masa jalan Sebaliknya, result := make([]string, 4) mempunyai empat elemen rentetan, membenarkan akses kepada result[0], result[1], result[2], dan result[3].

Resolusi untuk Kod Anda

Dalam fungsi myFunc anda, anda menggunakan hasil yang bermasalah := make([]string , 0, 4) permulaan. Memandangkan kod anda memerlukan menambahkan elemen, anda harus mempertimbangkan untuk menggunakan result := make([]string, 0) dan tambah elemen menggunakan fungsi append. Sebagai alternatif, anda boleh menggunakan result := []string{} atau result := make([]string, 4), bergantung pada keperluan khusus anda.

Berikut ialah versi kod anda yang berfungsi menggunakan make([] rentetan, 0) dan tambahkan (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>

Atas ialah kandungan terperinci Mengapa Kod My Go Melemparkan Ralat \"panik: runtime: index out of range\" Apabila Panjang Tatasusunan Bukan Nol?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn