Rumah >pembangunan bahagian belakang >Golang >Mengapa Tidak Panik Apabila Menghiris Sekeping di `len(slice)`?

Mengapa Tidak Panik Apabila Menghiris Sekeping di `len(slice)`?

Patricia Arquette
Patricia Arquetteasal
2024-12-23 04:26:16614semak imbas

Why Doesn't Go Panic When Slicing a Slice at `len(slice)`?

Kendalian Slice dalam Go: Memahami Sempadan untuk len(slice)

Mengapa Go membenarkan penghirisan daripada len(slice)? Soalan ini timbul daripada tingkah laku yang diperhatikan dalam coretan kod 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

Penjelasan:

Spesifikasi Go untuk ungkapan slice menyatakan bahawa indeks berada dalam julat jika 0 <= rendah <= tinggi <= len(a). Yang penting, untuk tatasusunan dan rentetan, indeks atas terikat adalah len(a), inklusif. Untuk kepingan, sempadan indeks atas ialah cap(a), yang dalam kes ini adalah sama dengan len(a).

Ini bermakna ungkapan a[3:] tidak panik kerana terikat indeks atas dibenarkan sehingga dan termasuk len(a). Walau bagaimanapun, memandangkan sempadan indeks bawah juga 3, kepingan yang terhasil akan kosong.

Indeks yang lebih besar daripada len(a) akan berada di luar julat dan menyebabkan panik masa jalan. Dalam contoh, a[4:] panik kerana ia cuba membuat kepingan dengan terikat indeks atas lebih besar daripada len(a).

Oleh itu, Go membenarkan penghirisan daripada len(slice) kerana spesifikasi secara eksplisit membenarkan indeks sehingga dan termasuk len(a) untuk tatasusunan dan rentetan. Ini membolehkan operasi penghirisan yang mudah tanpa memerlukan semakan eksplisit untuk memastikan bahawa sempadan indeks atas berada dalam julat yang ditentukan.

Atas ialah kandungan terperinci Mengapa Tidak Panik Apabila Menghiris Sekeping di `len(slice)`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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