Memahami Gelagat Ekspresi Slice Go
Dalam Go, penghirisan ialah mekanisme berkuasa untuk mengekstrak elemen tertentu daripada kepingan, tatasusunan atau rentetan. Walau bagaimanapun, tingkah laku tertentu mungkin kelihatan tidak dijangka, seperti berikut:
a := []int{1, 2, 3} fmt.Println(a[0:]) fmt.Println(a[1:]) fmt.Println(a[2:]) fmt.Println(a[3:]) // doesn't panic - why?? fmt.Println(a[4:]) // panics as expected
Mengapa a[3:] tidak panik?
Menurut bahasa Go spesifikasi, untuk tatasusunan atau kepingan rentetan, indeks berada dalam julat jika ia memenuhi syarat berikut: 0 <= rendah <= tinggi <= len(a). Walau bagaimanapun, untuk kepingan, sempadan indeks atas adalah cap(a) dan bukannya len(a). Dalam kes ini, tatasusunan asas mempunyai kapasiti 3, yang sama dengan panjangnya.
Oleh itu, a[3:] tidak panik kerana sempadan indeks atas 3 berada dalam julat sah yang ditentukan dengan topi(a). Ia menghasilkan kepingan kosong, kerana ia bermula pada indeks 3 dan mempunyai panjang 0 (len(a) - 3 = 0).
Mengapa a[4:] panik?
Sebaliknya, a[4:] panik kerana sempadan indeks atas 4 melebihi kedua-dua len(a) dan cap(a). Spesifikasi menyatakan bahawa indeks di luar julat pada masa jalankan akan membawa kepada panik masa jalan.
Atas ialah kandungan terperinci Mengapa `a[3:]` Go tidak Menghiris Panik, Tetapi `a[4:]` Adakah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!