Memahami Kapasiti Slice dan Panjangnya dalam Go
Apabila belajar Go daripada tutorialnya, seseorang mungkin menghadapi soalan seperti:
Soalan:
Dalam kod di bawah, mengapa kepingan c dan d dimulakan dengan nilai dan kapasiti yang berbeza?
func main() { a := make([]int, 5) b := make([]int, 0, 5) c := b[:2] d := c[2:5] }
Jawapan:
Dalam Go, kepingan disokong oleh tatasusunan. Apabila hirisan dibuat dengan make, tatasusunan sandaran dimulakan dengan nilai sifarnya. Dalam kes ini, ia ialah tatasusunan integer, setiap satu dimulakan kepada 0.
Apabila c dicipta sebagai kepingan b, ia berkongsi tatasusunan sandaran yang sama seperti b. Memandangkan b dicipta dengan tatasusunan sifar panjang, dua elemen pertama tatasusunan sandaran ialah 0. Oleh itu, c mempunyai panjang 2 dan elemennya kedua-duanya 0.
d dicipta sebagai kepingan c bermula pada indeks 2. Ia juga berkongsi tatasusunan sokongan yang sama seperti c. Walau bagaimanapun, kapasitinya berbeza kerana ia adalah ungkapan hirisan penuh. Ungkapan hirisan penuh mempunyai kapasiti yang sama dengan perbezaan antara indeks pertama dan terakhirnya, yang dalam kes ini ialah 5 - 2 = 3.
Sumber Tambahan:
Atas ialah kandungan terperinci Mengapa Go Slices `c` dan `d` Mempunyai Nilai dan Kapasiti Berbeza Selepas Menghiris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!