Rumah > pembangunan bahagian belakang > Golang > Mengapakah Go membuang ralat \'panic: runtime: index out of range\' apabila bekerja dengan kepingan walaupun panjang tatasusunan bukan sifar?

Mengapakah Go membuang ralat \'panic: runtime: index out of range\' apabila bekerja dengan kepingan walaupun panjang tatasusunan bukan sifar?

DDD
Lepaskan: 2024-10-29 09:29:29
asal
431 orang telah melayarinya

Why does Go throw a

Pergi "panik: ralat masa jalan: indeks di luar julat" Apabila Panjang Tatasusunan Bukan Sifar

Dalam Go, apabila bekerja dengan rentetan, anda mungkin menghadapi " indeks di luar julat" ralat masa jalan semasa cuba mengulanginya. Isu ini boleh timbul walaupun tatasusunan asas tidak kosong. Untuk menyelesaikannya, kita perlu memahami nuansa peruntukan kepingan dan lampiran.

Slices dan Dalamannya

Slices in Go mewakili segmen tatasusunan dengan penunjuk, panjang dan kapasiti. Apabila mencipta kepingan menggunakan make([]string, 0, 4), kami menentukan panjang 0 dan kapasiti 4. Ini bermakna tatasusunan asas kosong dan mengakses elemen secara langsung akan mengakibatkan ralat masa jalan.

Sebaliknya, make([]string, 4) memperuntukkan tatasusunan dengan 4 elemen, memulakannya dengan rentetan kosong. Oleh itu, mengakses elemen dalam kepingan ini adalah selamat tanpa mencetuskan ralat.

Fungsi tambah

Fungsi tambah memanjangkan panjang kepingan dengan menambahkan elemen padanya. Jika kepingan mempunyai kapasiti yang mencukupi, ia akan mengubah saiz tatasusunan asas untuk menampung elemen baharu. Walau bagaimanapun, jika kapasiti tidak mencukupi, tatasusunan baharu dicipta.

Dalam coretan kod yang diberikan, kepingan hasil pada mulanya kosong. Apabila menggunakan tambah dalam gelung untuk menambah elemen, ia cuba mengakses keratan pada indeks yang melebihi panjang semasa, menyebabkan ralat masa jalan.

Penyelesaian

Untuk menyelesaikan isu ini, pastikan kepingan hasil mempunyai panjang bukan sifar sebelum mengakses elemen dalam gelung. Ini boleh dicapai dengan memperuntukkan kepingan dengan panjang awal atau menggunakan tambah dengan cara yang diubah suai.

Pertimbangkan coretan kod berikut:

<code class="go">package main

import "fmt"
import "strings"

func myFunc(input string) []string {
    strs := strings.Fields(input)  // Extract words from the input string
    result := make([]string, 0, 4) // Initialize an empty slice with a capacity of 4
    for _, s := range strs {
        if strings.ContainsAny(s, "eaiu") { // Check if the word contains a vowel
            result = append(result, s) // Append the word to the slice
        }
    }
    return result
}

func main() {
    fmt.Println(myFunc("Political"))
}</code>
Salin selepas log masuk

Dalam kod ini, make([]string , 0, 4) memulakan hirisan kosong dengan kapasiti 4. Kemudian, gelung berulang pada setiap perkataan dalam rentetan input dan menambahkannya pada hirisan hasil jika ia mengandungi vokal. Fungsi tambah digunakan dengan betul, kerana gelung memastikan kepingan mempunyai panjang bukan sifar sebelum mengakses elemen.

Atas ialah kandungan terperinci Mengapakah Go membuang ralat \'panic: runtime: index out of range\' apabila bekerja dengan kepingan walaupun panjang tatasusunan bukan sifar?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan