Rumah > pembangunan bahagian belakang > Golang > Mengapa `a[3:]` Go tidak Menghiris Panik, Tetapi `a[4:]` Adakah?

Mengapa `a[3:]` Go tidak Menghiris Panik, Tetapi `a[4:]` Adakah?

Linda Hamilton
Lepaskan: 2024-12-10 08:03:10
asal
183 orang telah melayarinya

Why Doesn't Go's `a[3:]` Slice Panic, But `a[4:]` Does?

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan