Rumah > Artikel > pembangunan bahagian belakang > Mengapa Kod My Go Melemparkan Ralat \"panik: runtime: index out of range\" Apabila Panjang Tatasusunan Bukan Nol?
"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!