Rumah > Artikel > pembangunan bahagian belakang > Mengapa Menggugurkan Elemen Slice pada Permulaan Mengurangkan Kapasiti?
A Tour of Go menunjukkan gelagat hirisan, di mana sekeping integer dimulakan dan diubah suai melalui satu siri operasi. Satu pemerhatian yang membingungkan dalam demonstrasi ialah pengurangan kapasiti hirisan selepas menjatuhkan dua elemen pertama dalam baris terakhir.
Slice disokong oleh tatasusunan, dan menjatuhkan elemen pada permulaan hirisan secara berkesan menggerakkan titik permulaan hirisan dalam tatasusunan. Ini mengurangkan bilangan elemen antara permulaan hirisan dan penghujung tatasusunan, menghasilkan kapasiti yang lebih kecil.
Menggugurkan elemen pada penghujung kepingan tidak tidak menjejaskan kapasitinya kerana ia tidak mengubah jarak antara permulaan kepingan dan hujung tatasusunan. Potongan masih menempati julat slot yang sama dalam tatasusunan sandaran.
Perlu ambil perhatian bahawa operasi ini mengubah suai hirisan itu sendiri, bukan tatasusunan sandaran. Tatasusunan kekal tidak berubah sepanjang proses.
Dengan mencetak pengepala hirisan, kita boleh melihat perubahan dengan lebih jelas:
<code class="go">func printSlice(s []int) { sh := (*reflect.SliceHeader)(unsafe.Pointer(&s)) fmt.Printf("header=%+v len=%d cap=%d %v\n", sh, len(s), cap(s), s) }</code>
Keluaran menunjukkan cara penunjuk data bergerak apabila elemen digugurkan dari permulaan atau penghujung kepingan:
header=&{Data:272990208 Len:6 Cap:6} len=6 cap=6 [2 3 5 7 11 13] header=&{Data:272990208 Len:0 Cap:6} len=0 cap=6 [] header=&{Data:272990208 Len:4 Cap:6} len=4 cap=6 [2 3 5 7] header=&{Data:272990216 Len:2 Cap:4} len=2 cap=4 [5 7]
Atas ialah kandungan terperinci Mengapa Menggugurkan Elemen Slice pada Permulaan Mengurangkan Kapasiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!