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 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 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.
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>
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!