Slice dalam Go ialah tatasusunan dinamik yang mengubah saiz secara automatik mengikut keperluan. Walau bagaimanapun, kapasiti mereka, yang menunjukkan bilangan maksimum elemen yang boleh mereka pegang, biasanya tidak berubah. Ini boleh membawa kepada soalan tentang sama ada Go menawarkan cara untuk mengecilkan kapasiti ini selepas mengurangkan bilangan elemen dalam sekeping.
Dalam coretan kod yang disediakan, sekeping a dimulakan dan diisi dengan 10 juta integer. Matlamatnya adalah untuk mengurangkan saiznya kepada hanya 10 elemen. Kaedah tradisional seperti penghirisan dan pemadaman tidak mengubah suai kapasiti hirisan.
Keupayaan Potongan Mengecut
Go menyediakan cara untuk mencapai operasi "realloc" dengan berkesan:
a = append([]int64(nil), a[:newSize]...)
Kod ini mencipta kepingan kosong baharu dan menambahkan elemen newSize pertama daripada a kepadanya. Potongan baharu akan mempunyai kapasiti yang sama dengan newSize.
Pertimbangan
Adalah penting untuk ambil perhatian bahawa operasi ini mungkin melibatkan penyalinan tatasusunan asas. Pengkompil Go memutuskan sama ada untuk melakukan ubah saiz di tempat atau salinan, berdasarkan pengoptimuman.
Selain itu, pendekatan ini secara amnya ialah pengoptimuman mikro. Kebimbangan penggunaan memori harus ditangani melalui pemilihan algoritma dan struktur data yang teliti, dan bukannya bergantung semata-mata pada kapasiti hirisan yang mengecut.
Penghadan
Coretan kod yang disediakan adalah separa betul. Pengkompil tidak boleh selalu menentukan sama ada penunjuk lain merujuk tatasusunan sokongan hirisan. Akibatnya, operasi dijamin untuk melakukan salinan. Had ini mungkin ditangani dalam keluaran Go akan datang.
Atas ialah kandungan terperinci Bolehkah Go Slices Dikecilkan: Bagaimana untuk Mengurangkan Kapasiti Slice?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!