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

Patricia Arquette
Lepaskan: 2024-11-02 09:08:03
asal
570 orang telah melayarinya

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

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!