Slice vs Map: Memahami Gelagat Rujukan Parameter
Dalam Go, kepingan dan peta kedua-duanya mewakili jenis rujukan. Apabila mengubah suai elemen dalam mana-mana jenis, perubahan itu mencerminkan dalam semua kepingan/peta yang diperoleh daripadanya. Tingkah laku pengubahsuaian yang dikongsi ini terhasil daripada pelaksanaan peta berasaskan penunjuk, di mana pengubahsuaian yang dibuat melalui penuding digunakan pada peta asal.
Walau bagaimanapun, apabila menambah elemen baharu, kepingan dan peta berkelakuan berbeza. Dalam contoh kod yang disediakan, menambahkan elemen baharu pada peta (editMap) menyebabkan elemen tersebut boleh diakses melalui peta asal. Walau bagaimanapun, penambahan pada kepingan (editSlice) tidak mempunyai kesan pada kepingan asal.
Percanggahan ini berpunca daripada perbezaan pelaksanaan asas antara kepingan dan peta. Peta dilaksanakan sebagai penunjuk kepada struktur peta cincang, manakala kepingan adalah struktur ringan yang merujuk tatasusunan. Apabila menambahkan elemen baharu pada peta, penuding kekal malar, membawa kepada keterlihatan elemen baharu dalam semua peta terbitan.
Sebaliknya, apabila ditambahkan pada kepingan, pengepala kepingan (menggambarkan panjang kepingan, kapasiti, dan penunjuk tatasusunan) mesti diubah suai. Walau bagaimanapun, memandangkan Go melepasi pembolehubah mengikut nilai, sebarang perubahan yang dibuat pada salinan pengepala kepingan (dalam parameter lulus-masuk) tidak ditunjukkan dalam kepingan asal.
Untuk mencapai gelagat yang konsisten antara kepingan dan peta, seseorang boleh melaksanakan kepingan sebagai penunjuk, serupa dengan peta. Ini akan memastikan bahawa pengubahsuaian yang dibuat melalui penunjuk kepada kepingan juga mengubah suai kepingan asal. Walau bagaimanapun, pendekatan ini jarang berlaku dalam Go kerana kekurangan sokongan bahasa untuk lulus dan bekerja dengan penunjuk hirisan. Sebaliknya, konvensyen mengembalikan kepingan baharu selepas pengubahsuaian diterima pakai secara meluas.
Atas ialah kandungan terperinci Go Slices vs. Peta: Mengapa Apends Berkelakuan Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!