Rumah > Artikel > pembangunan bahagian belakang > Mengapakah \"panic: runtime error: index out of range\" Berlaku Apabila Go Slice Mempunyai Panjang Bukan Nol?
Panik: Ralat Masa Jalan: Indeks Di Luar Julat Apabila Panjang Tatasusunan Bukan Nol
Coretan kod yang disediakan cuba mengulang melalui rentetan ke perkataan berasingan yang mengandungi vokal. Walau bagaimanapun, ia menghadapi ralat "panik: ralat masa jalan: indeks di luar julat", walaupun panjang tatasusunan tidak batal.
Untuk memahami ralat ini, adalah penting untuk menyelidiki struktur data kepingan asas.
Memahami Slices
Slice dalam Go ialah deskriptor segmen tatasusunan. Ia terdiri daripada tiga komponen: penuding kepada tatasusunan sebenar, panjang segmen dan kapasitinya (panjang maksimum segmen boleh menampung).
Apabila mencipta kepingan menggunakan make([]rentetan, 0, 4) , tatasusunan asas kosong diperuntukkan, dengan panjang awal 0 dan kapasiti 4.
Membuat Perbezaan
hasil := make([]string, 0, 4) berbeza daripada hasil := make([]string, 4) dengan cara berikut:
Memahami append
Fungsi append menambah elemen pada hujung kepingan. Jika hirisan mempunyai kapasiti yang mencukupi, ia mengubah semula destinasi untuk menampung elemen baharu. Jika tidak, tatasusunan asas baharu diperuntukkan.
Memohon pada Kod
Dalam kod yang disediakan, hasil baris := make([]string, 0, 4 ) mencipta kepingan kosong. Percubaan untuk mengakses hasil[0] dalam gelung akan mengakibatkan panik.
Untuk membetulkan isu ini, gunakan append untuk mengisi hirisan, seperti dalam coretan kod berikut:
<code class="go">for i := 0; i < len(strs); i++ { if strings.ContainsAny(strs[i], "eaiu") { result = append(result, strs[i]) } }</code>
Sebagai alternatif, anda boleh memudahkan kod menggunakan gelung berasaskan julat:
<code class="go">for _, s := range strs { if strings.ContainsAny(s, "eaiu") { result = append(result, s) } }</code>
Atas ialah kandungan terperinci Mengapakah \"panic: runtime error: index out of range\" Berlaku Apabila Go Slice Mempunyai Panjang Bukan Nol?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!