Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Go Mengendalikan Peruntukan Tatasusunan Dinamik Apabila Saiz Tatasusunan Tidak Diketahui pada Masa Penyusunan?
Peruntukan Tatasusunan Dinamik dalam Go: Menggunakan Slices
Tidak seperti bahasa pengaturcaraan lain, tatasusunan Go tidak diperuntukkan secara langsung pada masa jalan. Ini boleh menimbulkan cabaran apabila saiz tatasusunan perlu ditentukan secara dinamik.
Dilema Tatasusunan Saiz Tetap
Pertimbangkan kod berikut yang cuba memperuntukkan tatasusunan dengan saiz masa jalan:
n := 1 var a [n]int
Kod ini akan mengakibatkan ralat, kerana Go memerlukan tatasusunan saiz menjadi ungkapan malar yang diketahui pada masa penyusunan.
Penyelesaian: Slices
Penyelesaian kepada dilema ini ialah menggunakan kepingan dan bukannya tatasusunan. Kepingan, tidak seperti tatasusunan, membenarkan saiznya ditentukan semasa masa jalan. Fungsi terbina dalam make() boleh digunakan untuk mencipta kepingan dengan panjang dan kapasiti yang ditentukan:
s := make([]int, n, 2*n)
Dalam contoh ini, s ialah kepingan integer dengan panjang awal n dan kapasiti daripada 2*n. Ini bermakna kepingan boleh memuatkan sehingga 2*n elemen sebelum perlu diagihkan semula.
Mengapa tidak Tatasusunan?
Mungkin kelihatan ingin tahu mengapa Go tidak benarkan peruntukan langsung tatasusunan dengan saiz masa jalan. Rasional di sebalik ini ialah Go lebih mengutamakan kepingan berbanding tatasusunan untuk kebanyakan senario. Slices memberikan fleksibiliti untuk mengubah saiz secara dinamik dan mengelakkan keperluan untuk pengurusan memori eksplisit yang disertakan dengan tatasusunan.
Oleh itu, pendekatan yang disyorkan dalam Go ialah bekerja dengan kepingan, yang menawarkan kedua-dua fleksibiliti peruntukan masa jalan dan kesederhanaan pengurusan memori automatik.
Atas ialah kandungan terperinci Bagaimanakah Go Mengendalikan Peruntukan Tatasusunan Dinamik Apabila Saiz Tatasusunan Tidak Diketahui pada Masa Penyusunan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!