Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengelakkan Ralat Di Luar Sempadan Semasa Menghiris dalam Go?
Slicing: Out of Bounds Error in Go
In Go, menghiris ialah operasi berkuasa yang membolehkan anda mencipta kepingan baharu daripada yang sedia ada. Walau bagaimanapun, adalah penting untuk memahami kemungkinan perangkap untuk mengelakkan ralat masa jalan.
Isunya
Kod berikut menunjukkan ralat di luar sempadan apabila menghiris sifar- kepingan panjang:
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) }
Apabila dijalankan, kod ini menghasilkan di luar sempadan ralat:
a len=5 cap=5 [0 0 0 0 0] b len=0 cap=5 [] panic: runtime error: slice bounds out of range goroutine 1 [running]: main.main() /private/var/folders/q_/53gv6r4s0y5f50v9p26qhs3h00911v/T/compile117.go:10 +0x150
Memahami Ralat
Untuk memahami ralat, adalah penting untuk menjelaskan konsep penghirisan hirisan. Dalam Go, hirisan ialah rujukan kepada kawasan ingatan yang bersebelahan. Apabila anda mencipta kepingan yang dihiris, anda sedang mencipta rujukan baharu kepada subset hirisan asal.
Dalam kes kod di atas, kepingan b mempunyai panjang 0 dan kapasiti 5. Mengikut kepada spesifikasi Go, "indeks hirisan i merujuk kepada elemen ke-i hirisan dalam keadaan semasanya." Oleh itu, percubaan untuk mengakses elemen pada indeks 1 hirisan dengan panjang 0 adalah di luar batas.
Penyelesaian
Untuk mengelakkan keluar dari- ralat sempadan, pastikan bahawa indeks yang digunakan semasa menghiris berada dalam julat yang sah untuk kepingan asal. Untuk kepingan, julat ini ditentukan oleh panjang dan kapasiti kepingan.
Sebagai contoh, operasi berikut akan sah:
Kesimpulan
Menghiris dalam Go ialah operasi asas untuk memanipulasi data. Walau bagaimanapun, adalah penting untuk memahami batasan untuk mengelakkan ralat masa jalan. Dengan memastikan bahawa indeks yang digunakan semasa menghiris berada dalam julat yang sah, anda boleh mengelakkan ralat luar sempadan dengan berkesan dan berfungsi dengan hirisan dengan selamat.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Ralat Di Luar Sempadan Semasa Menghiris dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!