Rumah >pembangunan bahagian belakang >Golang >Mengapakah \'panic: runtime error: index out of range\' Berlaku Apabila Go Slice Mempunyai Panjang Bukan Nol?

Mengapakah \'panic: runtime error: index out of range\' Berlaku Apabila Go Slice Mempunyai Panjang Bukan Nol?

Linda Hamilton
Linda Hamiltonasal
2024-10-31 15:24:52567semak imbas

Why Does

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:

  • make([]string, 0, 4): Memulakan tatasusunan kosong, bermakna mengakses hasil [0] akan menyebabkan panik.
  • make([]rentetan, 4): Memulakan tatasusunan dengan 4 elemen, membenarkan akses kepada hasil[0] melalui hasil[3].

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!

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