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
Lepaskan: 2024-10-31 15:24:52
asal
569 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan