Memahami Perubahan Kapasiti Slice dalam Go
Apabila bekerja dengan kepingan Go, adalah penting untuk memahami sifat asasnya, termasuk kapasitinya. Semasa menjatuhkan n item terakhir daripada kepingan mengekalkan kapasitinya, menjatuhkan n item pertama menjejaskan kapasiti.
Struktur Go Slice
Kepingan Go dilaksanakan sebagai struktur terdiri daripada tiga medan:
<code class="go">type slice struct { array unsafe.Pointer len int cap int }</code>
Menggugurkan n Item Terakhir
Apabila kita menggugurkan n item terakhir daripada a slice, menggunakan ungkapan s[:len(s)-n], kami mencipta kepingan baharu yang berkongsi tatasusunan asas yang sama seperti yang asal. Walau bagaimanapun, panjang kepingan baharu dikurangkan, manakala kapasiti kekal tidak berubah. Ini kerana tatasusunan asas mempunyai kapasiti yang mencukupi untuk menampung elemen yang tinggal.
Menggugurkan n Item Pertama
Sebaliknya, apabila kita menggugurkan n item pertama daripada kepingan, menggunakan ungkapan s[n:], kami bukan sahaja mencipta kepingan baharu dengan panjang yang lebih pendek tetapi juga memperuntukkan tatasusunan asas baharu. Kapasiti kepingan baharu dilaraskan untuk menampung bilangan elemen yang berkurangan.
Contoh
Pertimbangkan kod berikut:
<code class="go">func main() { s := []int{2, 3, 5, 7, 11, 13} printSlice(s) // Drop its last two values s = s[:len(s)-2] printSlice(s) // Drop its first two values s = s[2:] printSlice(s) }</code>
The output menunjukkan perubahan dalam panjang, kapasiti dan penunjuk tatasusunan yang mendasari semasa kita memanipulasi kepingan:
ptr=0x450000 len=6 cap=6 [2 3 5 7 11 13] ptr=0x450000 len=4 cap=6 [2 3 5 7] ptr=0x450008 len=2 cap=4 [5 7]
Kesimpulan
Memahami struktur dalaman kepingan Go ialah penting untuk memanipulasi mereka dengan berkesan. Dengan menyedari bahawa menjatuhkan n item terakhir mempengaruhi kapasiti secara berbeza daripada menjatuhkan n item pertama, pembangun boleh mengoptimumkan kod mereka dan mengelakkan potensi isu prestasi yang berkaitan dengan saiz semula kepingan.
Atas ialah kandungan terperinci Bagaimanakah Menggugurkan Elemen dari Permulaan Go Slice Mempengaruhi Kapasitinya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!