Dalam bidang pengaturcaraan Go, menghiris tatasusunan dan kepingan ialah konsep asas. Walau bagaimanapun, menghadapi kerumitan seperti yang diserlahkan dalam kod yang disediakan boleh menyebabkan pemula bingung. Mari kita rungkai kekeliruan yang mengelilingi kapasiti kepingan yang dihiris semula.
Kod contoh menunjukkan proses mencipta kepingan daripada tatasusunan dan kemudian menghiris semula salah satu kepingan tersebut. Walau bagaimanapun, ia menimbulkan satu pertikaian: mengapakah kapasiti kepingan yang dihiris semula tidak sepadan dengan kapasiti sebenar kepingan yang diperolehi daripadanya?
Untuk memahami perkara ini, kita mesti mendalami dalaman menghiris di Golang. Apabila hirisan dicipta daripada tatasusunan, ia pada asasnya menyediakan tetingkap ke dalam tatasusunan itu. Ia tidak mencipta salinan berasingan unsur; ia hanya merujuk tatasusunan asas. Panjang hirisan mewakili bilangan elemen yang terkandung pada masa ini, manakala kapasitinya menunjukkan bilangan maksimum elemen yang berpotensi untuk disimpan.
Kapasiti kepingan asal (b dalam kes ini) ditentukan mengikut saiz tatasusunan dari mana ia dicipta. Walau bagaimanapun, apabila kepingan semula dilakukan (seperti mencipta c daripada b), panjang kepingan baharu (c) dilaraskan berdasarkan indeks yang disediakan, tetapi kapasiti tetap sama. Ini kerana kepingan yang dihiris semula masih berkongsi tatasusunan asas yang sama seperti kepingan asal.
Dalam erti kata lain, kapasiti kepingan yang dihiris semula sentiasa kapasiti kepingan asal tolak indeks permulaan kepingan yang dihiris semula. Dalam contoh yang diberikan, b mempunyai kapasiti 5. Oleh kerana c dihiris semula bermula dari indeks ke-0, kapasitinya ialah 5 - 0 = 5. Ini menjelaskan mengapa c mempunyai kapasiti 5 walaupun hanya mempunyai panjang 2.
Untuk menggambarkan ini dengan lebih lanjut, mari kita ubah suai kod contoh sedikit:
func main() { b := make([]int, 0, 5) c := b[:2] d := c[1:5] // equivalent to d := b[1:5] d[0] = 1 printSlice("c", c) printSlice("d", d) }
Dalam kod yang diubah suai ini, d ialah kepingan b dihiris semula yang bermula pada indeks 1 dan naik ke indeks 5. Apabila kita mengubah suai d dengan memberikan nilai 1 kepada elemen pertamanya, adalah menarik untuk diperhatikan bahawa c juga terjejas. Ini kerana kedua-dua c dan d hanyalah tetingkap yang berbeza ke dalam tatasusunan asas yang sama b.
Atas ialah kandungan terperinci Mengapakah Kapasiti Slice Go yang dihiris semula tidak sepadan dengan kapasiti Slice Asal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!