Rumah > Artikel > pembangunan bahagian belakang > Mengapa Menggugurkan Elemen Pertama Slice dalam Go Mengubah Kapasitinya, Tetapi Menggugurkan Yang Terakhir Tidak?
Memahami Perubahan Kapasiti Slice: Menggugurkan Item Pertama vs. Last
Dalam Go, slice ialah struktur data yang menyediakan saiz dinamik yang boleh diubah pandangan tatasusunan asas. Apabila kapasiti hirisan berubah, ia mempengaruhi tatasusunan dan pengurusan memori yang mendasari.
Pertimbangkan kod Go berikut:
<code class="go">package main import "fmt" 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) } func printSlice(s []int) { fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s) }</code>
Mengapa kapasiti hirisan berubah apabila dua item pertama digugurkan, tetapi bukan apabila dua item terakhir digugurkan?
Untuk menjawab soalan ini, kita mesti memahami cara hirisan Go dilaksanakan. Ia adalah struct dengan tiga medan:
Apabila dua item terakhir hirisan digugurkan (s = s[:len(s)-2]), medan len dikurangkan, tetapi penunjuk tatasusunan dan medan topi tetap sama. Ini kerana tatasusunan asas tidak diubah suai dan hirisan itu masih merujuk kepada tatasusunan yang sama.
Walau bagaimanapun, apabila dua item pertama hirisan digugurkan (s = s[2:]), yang baharu tatasusunan dicipta untuk memegang kepingan baharu. Medan len dikurangkan, penuding tatasusunan dikemas kini untuk menghala ke tatasusunan baharu dan medan topi juga dikurangkan untuk menggambarkan saiz tatasusunan baharu yang lebih kecil.
Kesimpulan
Kapasiti kepingan berubah apabila item pertama digugurkan kerana tatasusunan pendasar baharu mesti dibuat untuk menampung kepingan. Ini tidak perlu apabila item terakhir digugurkan kerana tatasusunan sedia ada masih boleh digunakan.
Atas ialah kandungan terperinci Mengapa Menggugurkan Elemen Pertama Slice dalam Go Mengubah Kapasitinya, Tetapi Menggugurkan Yang Terakhir Tidak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!