Slicing: Out of Bounds Error in Go
Apabila melaksanakan kod berikut:
package main import "fmt" func main() { a := make([]int, 5) printSlice("a", a) b := make([]int, 0, 5) printSlice("b", b) c := b[1:] printSlice("c", c) } func printSlice(s string, x []int) { fmt.Printf("%s len=%d cap=%d %v\n", s, len(x), cap(x), x) }
anda menghadapi ralat "luar sempadan". Ralat ini berlaku kerana ungkapan penghirisan yang tidak sah semasa membuat kepingan c.
Dalam Go, menghiris tatasusunan atau kepingan mengikut peraturan ini:
Ungkapan penghirisan b[1:] cuba mencipta kepingan c baharu dengan sempadan bawah 1. Walau bagaimanapun, sempadan yang lebih tinggi tiada dan lalai kepada panjang b, iaitu 0. Ini menghasilkan kepingan dengan sempadan bawah lebih besar daripada sempadan atasnya, yang membawa kepada "di luar sempadan" ralat.
Untuk membetulkan ralat ini, anda mesti memastikan bahawa sempadan lebih tinggi bagi ungkapan penghirisan adalah lebih besar daripada atau sama dengan sempadan bawah. Sebagai contoh, anda boleh menggunakan ungkapan berikut untuk mencipta kepingan c yang sah:
c := b[1:2]
Ini menghasilkan kepingan c dengan sempadan bawah 1 dan sempadan atas 2, yang sah sejak 1 < = 2 <= cap(b) (kapasiti b ialah 5).
Atas ialah kandungan terperinci Mengapa Menghiris `b[1:]` Menyebabkan Ralat Luar Had dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!