Rumah > Artikel > pembangunan bahagian belakang > Mengapakah saya mendapat \"panic: runtime error: index out of range\" walaupun kepingan Go saya mempunyai kapasiti bukan sifar?
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!