Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah saya mendapat \"panic: runtime error: index out of range\" walaupun kepingan Go saya mempunyai kapasiti bukan sifar?

Mengapakah saya mendapat \"panic: runtime error: index out of range\" walaupun kepingan Go saya mempunyai kapasiti bukan sifar?

Patricia Arquette
Patricia Arquetteasal
2024-11-02 09:08:03571semak imbas

Why am I getting

Menyelesaikan masalah "panik: ralat masa jalan: indeks di luar julat" Apabila Panjang Tatasusunan Bukan Nol

Dalam Go, apabila bekerja dengan tatasusunan atau kepingan, adalah penting untuk memahami konsep panjang dan kapasiti. Dalam coretan kod yang diberikan, isu ini berpunca daripada memulakan tatasusunan hasil menggunakan make([]string, 0, 4).

Memahami Peranan make([]string, 0, 4)

make([]string, 0, 4) mencipta kepingan jenis []string dengan panjang awal 0 dan kapasiti 4. Kapasiti mentakrifkan bilangan maksimum unsur yang boleh disimpan dalam hirisan tanpa mengagihkan semula ingatan.

Membezakan Antara Panjang dan Kapasiti

Panjang menunjukkan bilangan elemen yang terdapat dalam kepingan pada masa ini, manakala kapasiti mewakili saiz maksimum yang boleh disimpannya . Jika kepingan itu sudah mengandungi unsur yang mencukupi, menambah lebih banyak item dalam kapasiti tidak akan menyebabkan pengagihan semula. Walau bagaimanapun, melebihi kapasiti akan mencetuskan pengagihan semula, yang melibatkan mencipta tatasusunan asas baharu dan menyalin elemen sedia ada.

Dalam kod anda, make([]string, 0, 4) memulakan kepingan kosong dengan kapasiti daripada 4. Percubaan untuk mengakses elemen melebihi panjang semasa (indeks 0) akan mengakibatkan ralat masa jalan kerana tiada unsur pada indeks tersebut.

Menyelesaikan Isu

Ralat boleh diselesaikan dengan sama ada memulakan hirisan dengan panjang awal yang mencukupi atau menggunakan tambahan untuk mengembangkan kepingan secara dinamik mengikut keperluan.

Pilihan 1: Mulakan dengan Panjang yang Mencukupi

Jika anda mengetahui anggaran bilangan elemen yang akan disimpan dalam kepingan, anda boleh memulakannya dengan panjang yang sesuai. Sebagai contoh, result := make([]string, 4) memulakan hirisan dengan panjang dan kapasiti 4.

Pilihan 2: Gunakan Append

Add appends elemen ke hujung kepingan. Jika kepingan mempunyai kapasiti yang mencukupi, ia dikisar semula untuk menampung elemen baharu. Jika tidak, tatasusunan asas baharu akan diperuntukkan. Dengan menggunakan append berulang kali, anda boleh mengembangkan kepingan secara beransur-ansur mengikut keperluan tanpa perlu risau tentang melebihi kapasiti.

Kod Ringkas Menggunakan Append

Berikut ialah versi ringkas kod anda menggunakan tambahkan:

<code class="go">package main

import (
    "fmt"
    "strings"
)

func main() {
    strs := strings.Fields("Political srt")
    var result []string
    for _, s := range strs {
        if strings.ContainsAny(s, "eaiu") {
            result = append(result, s)
        }
    }
    fmt.Println(result)
}</code>

Atas ialah kandungan terperinci Mengapakah saya mendapat \"panic: runtime error: index out of range\" walaupun kepingan Go saya mempunyai kapasiti bukan sifar?. 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